├── .ci └── Dockerfile ├── .cirrus.yml ├── .github └── ISSUE_TEMPLATE │ ├── bug-report.md │ ├── feature-request.md │ ├── page-about.md │ └── question.md ├── .gitignore ├── CHANGE-LOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Flutter_Go 代码开发规范.md ├── LICENSE ├── README-en.md ├── README.md ├── analysis_options.yaml ├── android ├── .project ├── .settings │ └── org.eclipse.buildship.core.prefs ├── app │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.buildship.core.prefs │ ├── build.gradle │ ├── google-services.json │ ├── release │ │ ├── app-release.apk │ │ └── output.json │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── fluttergo │ │ │ │ └── ali │ │ │ │ └── com │ │ │ │ └── fluttergo │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable │ │ │ ├── flutter_go_logo.png │ │ │ ├── launch_background.xml │ │ │ ├── logo.png │ │ │ └── splash.png │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_logo.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_logo.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_logo.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_logo.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_logo.png │ │ │ └── spalsh.png │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── key.properties └── settings.gradle ├── assets ├── app.db ├── fonts │ ├── Flamante-Roma-Medium.ttf │ ├── Flamante-Roma-MediumItalic.ttf │ └── Lato-Bold.ttf └── images │ ├── FlutterGo.png │ ├── ali_connors.png │ ├── arrow.png │ ├── btn_icon_dingyuehao_normal.png │ ├── calendar.png │ ├── food01.jpeg │ ├── food02.jpeg │ ├── food03.jpeg │ ├── food04.jpeg │ ├── food05.jpeg │ ├── food06.jpeg │ ├── gitHub.png │ ├── house.png │ ├── normal_user_icon.png │ ├── nothing.png │ ├── p1.png │ ├── p2.png │ ├── p3.png │ ├── paimaiLogo.png │ ├── painterImg.jpeg │ ├── plane.png │ └── timg.jpeg ├── docs ├── api.md ├── contribute.md ├── go-cli.md ├── needWidget.md ├── push-pr.md └── widget.md ├── go-cli ├── Readme.md ├── bin │ └── goCli.dart ├── config.json ├── pubspec.yaml ├── src │ ├── build │ │ ├── build_demo_list.dart │ │ └── build_page_list.dart │ ├── cli_command_runder.dart │ ├── command │ │ ├── build.dart │ │ ├── create_demo.dart │ │ ├── create_page.dart │ │ └── watch_md.dart │ ├── config.dart │ ├── exception │ │ └── demo.dart │ └── version.dart └── utils │ ├── tpl.md │ └── util.dart ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── flutter_export_environment.sh ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── Runner │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── 1024x1024@as.png │ │ │ ├── 120x120@2x-1.png │ │ │ ├── 120x120@2x.png │ │ │ ├── 152x152.png │ │ │ ├── 167x167.png │ │ │ ├── 180x180@3x.png │ │ │ ├── 20x20.png │ │ │ ├── 29x29@1x-2.png │ │ │ ├── 29x29@1x.png │ │ │ ├── 40x40@1x-1.png │ │ │ ├── 40x40@1x-2.png │ │ │ ├── 40x40@1x.png │ │ │ ├── 58x58@2x-1.png │ │ │ ├── 58x58@2x.png │ │ │ ├── 60x60@3x.png │ │ │ ├── 76x76.png │ │ │ ├── 80x80@2x-1.png │ │ │ ├── 80x80@2x.png │ │ │ ├── 87x87.png │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── Image.imageset │ │ │ └── Contents.json │ │ ├── Launch2.launchimage │ │ │ ├── Contents.json │ │ │ ├── iPad Landscape.png │ │ │ ├── iPad Landscape@2x.png │ │ │ ├── iPad Portrait.png │ │ │ ├── iPad Portrait@2x.png │ │ │ ├── iPhone Portrait-Retina 4.png │ │ │ ├── iPhone Portrait-Retina HD 4.7.png │ │ │ ├── iPhone Portrait-Retina HD 5.5.png │ │ │ ├── iPhone Portrait@2x.png │ │ │ ├── iPhone XR Portrait.png │ │ │ ├── iPhone XS Max Portrait.png │ │ │ └── iPhone X_XS Portrait.png │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── README.md │ │ │ ├── flutter go-1.png │ │ │ ├── flutter go-2.png │ │ │ └── flutter go.png │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── GoogleService-Info.plist │ ├── Images.xcassets │ │ └── LaunchImage-2.launchimage │ │ │ └── Contents.json │ ├── Info.plist │ ├── Runner-Bridging-Header.h │ ├── Runner.entitlements │ └── main.m ├── flutter go.png └── launch │ ├── iPad Landscape.png │ ├── iPad Landscape@2x.png │ ├── iPad Portrait.png │ ├── iPad Portrait@2x.png │ ├── iPhone Landscape-Retina HD 5.5.png │ ├── iPhone Portrait-Retina 4.png │ ├── iPhone Portrait-Retina HD 4.7.png │ ├── iPhone Portrait-Retina HD 5.5.png │ ├── iPhone Portrait@2x.png │ ├── iPhone XR Landscape.png │ ├── iPhone XR Portrait.png │ ├── iPhone XS Max Landscape.png │ ├── iPhone XS Max Portrait.png │ ├── iPhone X_XS Landscape.png │ └── iPhone X_XS Portrait.png ├── lib ├── api │ └── api.dart ├── blocs │ ├── industry_api.dart │ ├── industry_bloc.dart │ ├── industry_event.dart │ ├── industry_main.dart │ ├── industry_model.dart │ ├── industry_state.dart │ └── search_result.dart ├── components │ ├── cate_card.dart │ ├── category.dart │ ├── disclaimer_msg.dart │ ├── flutter_markdown │ │ ├── LICENSE │ │ ├── README.md │ │ └── lib │ │ │ ├── flutter_markdown.dart │ │ │ └── src │ │ │ ├── builder.dart │ │ │ ├── style_sheet.dart │ │ │ └── widget.dart │ ├── full_screen_code_dialog.dart │ ├── home_banner.dart │ ├── list_refresh.dart │ ├── list_view_item.dart │ ├── loading.dart │ ├── markdown.dart │ ├── pagination.dart │ ├── search_input.dart │ ├── single_theme_color.dart │ ├── widget_demo.dart │ ├── widget_item.dart │ └── widget_item_container.dart ├── event │ ├── event_bus.dart │ └── event_model.dart ├── main.dart ├── model │ ├── base.dart │ ├── cat.dart │ ├── collection.dart │ ├── responseData.dart │ ├── search_history.dart │ ├── story.dart │ ├── user_info.dart │ ├── user_info_cache.dart │ ├── version.dart │ └── widget.dart ├── page_demo_package │ ├── .demo.json │ ├── PullToRefresh_chenfeihu_5553db80_52ae_4241_9c8a_5c9e1f92b096 │ │ ├── .demo.json │ │ ├── index.dart │ │ └── src │ │ │ └── index.dart │ ├── RangeSlider_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096 │ │ ├── .demo.json │ │ ├── index.dart │ │ └── src │ │ │ └── index.dart │ ├── demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 │ │ ├── .demo.json │ │ ├── index.dart │ │ └── src │ │ │ └── index.dart │ ├── index.dart │ ├── info.json │ ├── local_ab_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096 │ │ ├── .demo.json │ │ ├── index.dart │ │ └── src │ │ │ └── index.dart │ └── readme.md ├── resources │ ├── icon_names.dart │ ├── shared_preferences_keys.dart │ └── widget_name_to_icon.dart ├── routers │ ├── application.dart │ ├── router_handler.dart │ └── routers.dart ├── standard_pages │ ├── .pages.json │ ├── PullToRefresh_chenfeihu_cd9b8b80_52ae_4241_9c8a_5c9e1f92b096 │ │ ├── .page.json │ │ ├── index.dart │ │ └── index.md │ ├── RangeSlider_hanxu_cbffbf7c_52ae_4241_9c8a_5c9e1f92b096 │ │ ├── .page.json │ │ ├── index.dart │ │ └── index.md │ ├── index.dart │ ├── local_hnaxu_5d7178d0_42ae_4241_9c8a_5c9e1f92b096 │ │ ├── .page.json │ │ ├── index.dart │ │ └── index.md │ ├── standard_for_slider_sanfan_8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096 │ │ ├── .page.json │ │ ├── index.dart │ │ └── index.md │ ├── standard_sanfan_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096 │ │ ├── .page.json │ │ ├── index.dart │ │ └── index.md │ └── test_abc_84f38e00_42ae_4241_9c8a_5c9e1f92b096 │ │ ├── .page.json │ │ ├── index.dart │ │ └── index.md ├── utils │ ├── analytics.dart │ ├── data_utils.dart │ ├── example_code_parser.dart │ ├── high_light_code.dart │ ├── net_utils.dart │ ├── provider.dart │ ├── shared_preferences.dart │ ├── sql.dart │ ├── style.dart │ ├── syntax_highlighter.dart │ └── util.dart ├── views │ ├── collection_page │ │ ├── collection_full_page.dart │ │ └── collection_page.dart │ ├── first_page │ │ ├── drawer_page.dart │ │ ├── first_page.dart │ │ ├── first_page_item.dart │ │ ├── main_app_bar.dart │ │ ├── main_page.dart │ │ ├── search_page.dart │ │ └── sub_page.dart │ ├── fourth_page │ │ ├── page_dragger.dart │ │ ├── page_reveal.dart │ │ ├── pager_indicator.dart │ │ └── pages.dart │ ├── home.dart │ ├── issuse_message_page │ │ └── issuse_message_page.dart │ ├── login_page │ │ └── login_page.dart │ ├── standard_demo_page │ │ └── index.dart │ ├── user_page │ │ └── user_page.dart │ ├── web_page │ │ └── web_view_page.dart │ ├── welcome_page │ │ ├── fourth_page.dart │ │ └── index.dart │ └── widget_page │ │ └── widget_page.dart └── widgets │ ├── 404.dart │ ├── components │ ├── Bar │ │ ├── AppBar │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── BottomAppBar │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ButtonBar │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── FlexibleSpaceBar │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── SliverAppBar │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── SnackBar │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── SnackBarAction │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── TabBar │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Card │ │ ├── Card │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Chip │ │ ├── Chip │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ChipTheme │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ChipThemeData │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ChoiceChip │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── FilterChip │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── InputChip │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── RawChip │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Dialog │ │ ├── AboutDialog │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── AlertDialog │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── Dialog │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── SimpleDialog │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Grid │ │ ├── GridPaper │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── GridTile │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── GridTileBar │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── GridView │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── SliverGrid │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── List │ │ ├── AnimatedList │ │ │ ├── demo.dart │ │ │ ├── index.dart │ │ │ └── model.dart │ │ ├── ListBody │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ListView │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Menu │ │ ├── CheckedPopupMenuItem │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── DropdownMenuItem │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── PopupMenuButton │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── PopupMenuDivider │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── PopupMenuEntry │ │ │ └── index.dart │ │ ├── PopupMenuItem │ │ │ └── index.dart │ │ ├── PopupMenuItemState │ │ │ └── index.dart │ │ └── index.dart │ ├── Navigation │ │ ├── BottomNavigationBar │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── BottomNavigationBarItem │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Panel │ │ ├── ExpansionPanel │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ExpansionPanelList │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ExpansionPanelRadio │ │ │ └── index.dart │ │ └── index.dart │ ├── Pick │ │ ├── CityPIcker │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── DayPicker │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── MonthPicker │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ShowdatePicker │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── YearPicker │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Progress │ │ ├── CircularProgressIndicator │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── LinearProgressIndicator │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── RefreshProgressIndicator │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Scaffold │ │ ├── Scaffold │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ScaffoldState │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Scroll │ │ ├── BoxScrollView │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── CustomScrollView │ │ │ ├── demo.dart │ │ │ ├── index.dart │ │ │ └── product_list.dart │ │ ├── NestedScrollView │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ScrollMetrics │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ScrollPhysics │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ScrollView │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── Scrollable │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ ├── ScrollbarPainter │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Tab │ │ ├── Tab │ │ │ ├── demo.dart │ │ │ └── index.dart │ │ └── index.dart │ └── index.dart │ ├── elements │ ├── Form │ │ ├── Button │ │ │ ├── DropdownButton │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── FlatButton │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── FloatingActionButton │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── IconButton │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── OutlineButton │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── PopupMenuButton │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── RaisedButton │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── RawMaterialButton │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── CheckBox │ │ │ ├── Checkbox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── CheckboxListTile │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Input │ │ │ ├── TextField │ │ │ │ ├── index.dart │ │ │ │ └── text_field_demo.dart │ │ │ └── index.dart │ │ ├── Radio │ │ │ ├── Radio │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── RadioListTile │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Slider │ │ │ ├── Slider │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── SliderTheme │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── SliderThemeData │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Switch │ │ │ ├── AnimatedSwitcher │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── Switch │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── SwitchListTile │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Text │ │ │ ├── RichText │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── Text │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Frame │ │ ├── Align │ │ │ ├── Align │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Box │ │ │ ├── ConstrainedBox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── DecoratedBox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── FittedBox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── LimitedBox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── OverflowBox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── RotatedBox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── SizeBox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── SizedOverflowBox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── UnconstrainedBox │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Expanded │ │ │ ├── Expanded │ │ │ │ ├── expanded_demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Layout │ │ │ ├── Center │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── Column │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── Container │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── Row │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Spacing │ │ │ ├── AnimatedPadding │ │ │ │ ├── animatedPadding_demo.dart │ │ │ │ └── index.dart │ │ │ ├── Padding │ │ │ │ ├── index.dart │ │ │ │ └── padding_demo.dart │ │ │ ├── SliverPadding │ │ │ │ ├── index.dart │ │ │ │ ├── product_list.dart │ │ │ │ └── sliverpadding_demo.dart │ │ │ └── index.dart │ │ ├── Stack │ │ │ ├── IndexedStack │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── Stack │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Table │ │ │ ├── Table │ │ │ │ ├── index.dart │ │ │ │ └── table_demo.dart │ │ │ └── index.dart │ │ └── index.dart │ ├── Media │ │ ├── Canvas │ │ │ ├── Canvas │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── CircleProgressBarPainter │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── PainterPath │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── PainterSketch │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Icon │ │ │ ├── Icon │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── IconData │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── IconTheme │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── IconThemeData │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── ImageIcon │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ └── index.dart │ │ ├── Image │ │ │ ├── AssetImage │ │ │ │ ├── assetImage_demo.dart │ │ │ │ └── index.dart │ │ │ ├── DecorationImage │ │ │ │ ├── decorationImage_demo.dart │ │ │ │ └── index.dart │ │ │ ├── DecorationImagePainter │ │ │ │ ├── decoration_image_painter_demo.dart │ │ │ │ └── index.dart │ │ │ ├── ExactAssetImage │ │ │ │ ├── exact_asset_image_demo.dart │ │ │ │ └── index.dart │ │ │ ├── FadeInImage │ │ │ │ ├── fade_in_image_demo.dart │ │ │ │ └── index.dart │ │ │ ├── FileImage │ │ │ │ ├── file_image_demo.dart │ │ │ │ └── index.dart │ │ │ ├── Image │ │ │ │ ├── demo.dart │ │ │ │ └── index.dart │ │ │ ├── MemoryImage │ │ │ │ ├── index.dart │ │ │ │ └── memory_image_demo.dart │ │ │ ├── NetworkImage │ │ │ │ ├── index.dart │ │ │ │ └── network_image_demo.dart │ │ │ ├── RawImage │ │ │ │ ├── index.dart │ │ │ │ └── raw_image_demo.dart │ │ │ ├── index.dart │ │ │ ├── paintImage │ │ │ │ ├── index.dart │ │ │ │ └── paint_image_demo.dart │ │ │ └── precacheImage │ │ │ │ ├── index.dart │ │ │ │ └── precache_image_demo.dart │ │ └── index.dart │ └── index.dart │ ├── index.dart │ └── themes │ ├── Cupertino │ ├── CupertinoApp │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoButton │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoColors │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoIcons │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoNavigationBar │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoPageRoute │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoPageScaffold │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoPicker │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoPopupSurface │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoScrollbar │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoSegmentedControl │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoSlider │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoSliverNavigationBar │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoSwitch │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoTabBar │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoTabScaffold │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoTabView │ │ ├── demo.dart │ │ └── index.dart │ ├── CupertinoTimerPicker │ │ ├── demo.dart │ │ └── index.dart │ └── index.dart │ ├── Material │ ├── MaterialAccentColor │ │ └── index.dart │ ├── MaterialApp │ │ ├── demo.dart │ │ └── index.dart │ ├── MaterialButton │ │ ├── demo.dart │ │ └── index.dart │ ├── MaterialColor │ │ ├── demo.dart │ │ └── index.dart │ ├── MaterialPageRoute │ │ ├── demo.dart │ │ └── index.dart │ ├── MergeableMaterialItem │ │ ├── demo.dart │ │ └── index.dart │ └── index.dart │ └── index.dart ├── mupp_build_env_init.sh ├── pubspec.yaml ├── recruit ├── test ├── imp.dart ├── imp2.dart ├── test.dart └── widget_test.dart └── tools ├── getPR.sh └── parsLog.js /.ci/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM cirrusci/flutter:stable 2 | 3 | RUN sudo apt-get update -y 4 | 5 | RUN sudo apt-get install -y --no-install-recommends gnupg 6 | 7 | # Add repo for gcloud sdk and install it 8 | RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | \ 9 | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list 10 | 11 | RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | \ 12 | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - 13 | 14 | RUN sudo apt-get update && sudo apt-get install -y google-cloud-sdk && \ 15 | gcloud config set core/disable_usage_reporting true && \ 16 | gcloud config set component_manager/disable_update_check true 17 | 18 | RUN yes | sdkmanager \ 19 | "platforms;android-29" \ 20 | "build-tools;29.0.2" \ 21 | "extras;google;m2repository" \ 22 | "extras;android;m2repository" 23 | 24 | RUN yes | sdkmanager \ 25 | "platforms;android-28" \ 26 | "build-tools;28.0.3" \ 27 | "extras;google;m2repository" \ 28 | "extras;android;m2repository" 29 | 30 | RUN yes | sdkmanager --licenses 31 | -------------------------------------------------------------------------------- /.cirrus.yml: -------------------------------------------------------------------------------- 1 | task: 2 | use_compute_credits: $CIRRUS_USER_COLLABORATOR == 'true' && $CIRRUS_PR == '' 3 | container: 4 | dockerfile: .ci/Dockerfile 5 | cpu: 8 6 | memory: 16G 7 | pub_cache: 8 | folder: ~/.pub-cache 9 | setup_script: 10 | - flutter channel stable 11 | - flutter upgrade 12 | build_script: 13 | - flutter build apk 14 | test_script: flutter test 15 | 16 | task: 17 | use_compute_credits: $CIRRUS_USER_COLLABORATOR == 'true' 18 | osx_instance: 19 | #image: mojave-xcode-10.2-flutter 20 | image: mojave-flutter 21 | pub_cache: 22 | folder: ~/.pub-cache 23 | setup_script: 24 | - pod repo update 25 | - flutter channel stable 26 | - flutter upgrade 27 | create_simulator_script: 28 | - xcrun simctl list 29 | - xcrun simctl create Flutter-iPhone com.apple.CoreSimulator.SimDeviceType.iPhone-X com.apple.CoreSimulator.SimRuntime.iOS-12-2 | xargs xcrun simctl boot 30 | build_script: 31 | - flutter build ios --no-codesign 32 | test_script: flutter test 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F41B Bug Report" 3 | about: Something isn't working as expected 4 | --- 5 | 6 | ## Bug Report 7 | 8 | **仅限中文与英文**, 其他语言的提交将直接被关闭 9 | 10 | 请先确认查找了已有的 issue [GitHub issues](https://github.com/apache/incubator-shardingsphere-example/issues). 11 | 12 | 为了更好的收录您反馈或者提交的相关pr. 请您关注您提交的问题, 我们可能需要更多的详细信息, 我们会在issue下先您收集相关信息, 13 | 如果长时间未得到您的回复, 如果我们无法在某些环境上重现该问题, 并且您**超过7天未回复**, 我们可能会关 **闭掉issue**, 谢谢 14 | 15 | 16 | ### 您当前的flutter doctor信息 17 | 18 | ### 预期的表现 19 | 20 | ### 实际的表现 21 | 22 | ### 预期的分析 (给出您能想到, 任何您能想到的) 23 | 24 | ### 重现的方式, 例如从 A界面 点击 b, 跳转到B页面, 界面出现溢出乱码等. 25 | 26 | ### 用于重现此问题或者可能解决以上问题的示例代码(例如github 链接代码) 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F680 Feature Request" 3 | about: I have a suggestion 4 | --- 5 | 6 | ## Feature Request 7 | 8 | **仅限中文与英文**, 其他语言的提交将直接被关闭 9 | 10 | 请先确认查找了已有的 issue [GitHub issues](https://github.com/apache/incubator-shardingsphere-example/issues). 11 | 12 | 为了更好的收录您反馈或者提交的相关pr. 请您关注您提交的问题, 我们可能需要更多的详细信息, 我们会在issue下先您收集相关信息, 13 | 如果长时间未得到您的回复, 如果我们无法在某些环境上重现该问题, 并且您**超过7天未回复**, 我们可能会关 **闭掉issue**, 谢谢 14 | 15 | 16 | ### 您的功能需求是否与哪些问题有关? 17 | 18 | ### 描述您想要的功能. 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "\U0001F914 Question" 3 | about: Usage question that isn't answered in docs or discussion 4 | --- 5 | 6 | ## Question 7 | 8 | **仅限中文与英文**, 其他语言的提交将直接被关闭 9 | 10 | 请先确认查找了已有的 issue [GitHub issues](https://github.com/apache/incubator-shardingsphere-example/issues). 11 | 12 | 为了更好的收录您反馈或者提交的相关pr. 请您关注您提交的问题, 我们可能需要更多的详细信息, 我们会在issue下先您收集相关信息, 13 | 如果长时间未得到您的回复, 如果我们无法在某些环境上重现该问题, 并且您**超过7天未回复**, 我们可能会关 **闭掉issue**, 谢谢 14 | 15 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | [Flutter Go 共建](https://github.com/alibaba/flutter-go/blob/master/docs/contribute.md) 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FlutterGo 2 | 3 | 感谢大家一直以来对 FlutterGo 的支持与反馈。 4 | 5 | 6 | 7 | 但是 **由于团队内部组织调整变更**,很遗憾的宣布 FlutterGo 目前**暂停维护**。 8 | 9 | 10 | 11 | 但是后期我们会再升级迭代 FlutterGo 新版本,也同时希望更多Flutter爱好者参与加入。 12 | 13 | 14 | 15 | - 简历投递 邮箱:yifeng.yl@alibaba-inc.com 16 | - 钉钉扫码直接连接: 17 | - 18 | -------------------------------------------------------------------------------- /android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | android 4 | Project android created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.buildship.core.gradleprojectbuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.buildship.core.gradleprojectnature 16 | 17 | 18 | -------------------------------------------------------------------------------- /android/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir= 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /android/app/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /android/app/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | app 4 | Project app created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | -------------------------------------------------------------------------------- /android/app/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir=.. 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /android/app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "611157827052", 4 | "firebase_url": "https://alibaba-flutter-go.firebaseio.com", 5 | "project_id": "alibaba-flutter-go", 6 | "storage_bucket": "alibaba-flutter-go.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:611157827052:android:c6129e5eff2f125d", 12 | "android_client_info": { 13 | "package_name": "com.alibaba.fluttergo" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "611157827052-iiuevj8qu56alpqh47v37j9sd4e40di7.apps.googleusercontent.com", 19 | "client_type": 3 20 | } 21 | ], 22 | "api_key": [ 23 | { 24 | "current_key": "AIzaSyA9chxDIuds7gmPQTJPpDpoXyN9rDTdvhU" 25 | } 26 | ], 27 | "services": { 28 | "appinvite_service": { 29 | "other_platform_oauth_client": [ 30 | { 31 | "client_id": "611157827052-iiuevj8qu56alpqh47v37j9sd4e40di7.apps.googleusercontent.com", 32 | "client_type": 3 33 | } 34 | ] 35 | } 36 | } 37 | } 38 | ], 39 | "configuration_version": "1" 40 | } 41 | -------------------------------------------------------------------------------- /android/app/release/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/release/app-release.apk -------------------------------------------------------------------------------- /android/app/release/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0.6","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/fluttergo/ali/com/fluttergo/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.alibaba.fluttergo 2 | 3 | import android.os.Bundle 4 | 5 | import io.flutter.app.FlutterActivity 6 | import io.flutter.plugins.GeneratedPluginRegistrant 7 | 8 | class MainActivity: FlutterActivity() { 9 | override fun onCreate(savedInstanceState: Bundle?) { 10 | super.onCreate(savedInstanceState) 11 | GeneratedPluginRegistrant.registerWith(this) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/flutter_go_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/drawable/flutter_go_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/drawable/logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/drawable/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-hdpi/ic_launcher_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-mdpi/ic_launcher_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-xhdpi/ic_launcher_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_logo.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/spalsh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/android/app/src/main/res/mipmap-xxxhdpi/spalsh.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.0' 3 | repositories { 4 | google() 5 | jcenter() 6 | //Crashlytics SDK 7 | maven { 8 | url 'https://maven.fabric.io/public' 9 | } 10 | } 11 | 12 | dependencies { 13 | classpath 'com.android.tools.build:gradle:3.3.0' 14 | //firebase 15 | classpath 'com.google.gms:google-services:4.2.0' 16 | //Crashlytics SDK 17 | classpath 'io.fabric.tools:gradle:1.26.1' 18 | // 性能监控 19 | ///classpath 'com.google.firebase:firebase-plugins:1.1.5' 20 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 21 | } 22 | } 23 | 24 | allprojects { 25 | repositories { 26 | google() 27 | jcenter() 28 | //Crashlytics SDK 29 | maven { 30 | url 'https://maven.google.com/' 31 | } 32 | } 33 | } 34 | 35 | rootProject.buildDir = '../build' 36 | subprojects { 37 | project.buildDir = "${rootProject.buildDir}/${project.name}" 38 | } 39 | subprojects { 40 | project.evaluationDependsOn(':app') 41 | } 42 | 43 | task clean(type: Delete) { 44 | delete rootProject.buildDir 45 | } 46 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.enableJetifier=true 3 | android.useAndroidX=true -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Jan 10 15:37:36 CST 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip 7 | -------------------------------------------------------------------------------- /android/key.properties: -------------------------------------------------------------------------------- 1 | storePassword=fluttergo123 2 | keyPassword=fluttergo123 3 | keyAlias=key 4 | storeFile=/Users/xj.deng/key.jks -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /assets/app.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/app.db -------------------------------------------------------------------------------- /assets/fonts/Flamante-Roma-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/fonts/Flamante-Roma-Medium.ttf -------------------------------------------------------------------------------- /assets/fonts/Flamante-Roma-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/fonts/Flamante-Roma-MediumItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /assets/images/FlutterGo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/FlutterGo.png -------------------------------------------------------------------------------- /assets/images/ali_connors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/ali_connors.png -------------------------------------------------------------------------------- /assets/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/arrow.png -------------------------------------------------------------------------------- /assets/images/btn_icon_dingyuehao_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/btn_icon_dingyuehao_normal.png -------------------------------------------------------------------------------- /assets/images/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/calendar.png -------------------------------------------------------------------------------- /assets/images/food01.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/food01.jpeg -------------------------------------------------------------------------------- /assets/images/food02.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/food02.jpeg -------------------------------------------------------------------------------- /assets/images/food03.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/food03.jpeg -------------------------------------------------------------------------------- /assets/images/food04.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/food04.jpeg -------------------------------------------------------------------------------- /assets/images/food05.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/food05.jpeg -------------------------------------------------------------------------------- /assets/images/food06.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/food06.jpeg -------------------------------------------------------------------------------- /assets/images/gitHub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/gitHub.png -------------------------------------------------------------------------------- /assets/images/house.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/house.png -------------------------------------------------------------------------------- /assets/images/normal_user_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/normal_user_icon.png -------------------------------------------------------------------------------- /assets/images/nothing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/nothing.png -------------------------------------------------------------------------------- /assets/images/p1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/p1.png -------------------------------------------------------------------------------- /assets/images/p2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/p2.png -------------------------------------------------------------------------------- /assets/images/p3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/p3.png -------------------------------------------------------------------------------- /assets/images/paimaiLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/paimaiLogo.png -------------------------------------------------------------------------------- /assets/images/painterImg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/painterImg.jpeg -------------------------------------------------------------------------------- /assets/images/plane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/plane.png -------------------------------------------------------------------------------- /assets/images/timg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/assets/images/timg.jpeg -------------------------------------------------------------------------------- /docs/needWidget.md: -------------------------------------------------------------------------------- 1 | #待加入的组件 2 | 3 | 以下是flutter go 中缺失的部分组件. 欢迎大家共建.参与方式请看[共建说明](https://github.com/alibaba/flutter-go/blob/master/docs/contribute.md) 4 |
注:✔表明已加入
5 | 6 | - [x] Scaffold 7 | - [ ] Hero 8 | - [ ] Listener 9 | - [ ] Safearea 10 | - [ ] ClipRect 11 | - [ ] WillPopScope 12 | - [ ] FutureBuilder 13 | - [ ] StreamBuilder 14 | - [ ] Notification 15 | - [ ] runZoned 16 | - [ ] IgnorePointer 17 | - [ ] AbsorbPointer 18 | - [ ] FlutterLogo 19 | - [ ] Placeholder 20 | - [ ] Offstage 21 | - [ ] Visibility 22 | - [ ] Baseline 23 | - [ ] CustomPainter 24 | - [ ] Border 25 | - [ ] Wrap 26 | - [ ] Transform 27 | - [ ] SingleChildScrollView 28 | - [ ] Positioned 29 | - [ ] InheritedWidget 30 | - [ ] PageView 31 | - [ ] LayoutBuilder 32 | - [ ] MediaQuery 33 | - [ ] RefreshIndicator 34 | - [ ] Opacity 35 | - [ ] ExcludeSemantics 36 | - [ ] DataTable 37 | - [ ] Tooltip 38 | - [ ] Form 39 | - [ ] FormField -------------------------------------------------------------------------------- /docs/push-pr.md: -------------------------------------------------------------------------------- 1 | # 如何为一个项目提PR 2 | 3 | 4 | ## PR 的含义 5 | 6 | PR的全称是 **pull request**, 可以理解成. 让开源项目拉取合并他方的请求. 7 | 8 | 9 | ## pull request 10 | 11 | 1. 将 开源flutter go项目 fork到我们自己的仓库. 12 | 13 | ![如何fock项目](https://img.alicdn.com/tfs/TB1XbnDbQH0gK0jSZPiXXavapXa-1425-672.gif) 14 | 15 | 2. 将Fork的仓库 clone 到本地,进行本地修改. 16 | 17 | 3. 将改动push到自己的仓库中 18 | 19 | 20 | ``` 21 | git add {some change file} 22 | git commit ... 23 | git push origin {your branch} 24 | 25 | ``` 26 | 27 | 28 | 4. 登陆github, 从**自己的仓库**向**开源项目仓库** 发起 **pull request** (合并申请); 29 | 30 | 过程参考: 31 | 32 | ![如何提pr](https://img.alicdn.com/tfs/TB1zV_BbKL2gK0jSZPhXXahvXXa-1425-672.gif) 33 | 34 | 35 | 5. 开源项目维护者会review您的 **pull request**,展开讨论或者修改, 一旦通过审核,开源项目维护者合并该分支到正式仓库然后并关闭合并申请。 -------------------------------------------------------------------------------- /go-cli/bin/goCli.dart: -------------------------------------------------------------------------------- 1 | import 'package:args/args.dart'; // 使用其中两个类ArgParser和ArgResults 2 | import 'package:args/command_runner.dart'; 3 | import '../src/cli_command_runder.dart'; 4 | ArgResults argResults; // 声明ArgResults类型的顶级变量,保存解析的参数结果 5 | 6 | // 同时,argResults也是ArgResults的实例 7 | void main(List args) async { 8 | // createDemo(); 9 | try { 10 | await run(args); 11 | } on UsageException catch (e) { 12 | 13 | print(' '); 14 | print(e.usage); 15 | 16 | } 17 | } -------------------------------------------------------------------------------- /go-cli/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sanfan" 3 | } -------------------------------------------------------------------------------- /go-cli/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: goCli 2 | description: bin_go 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # Read more about versioning at semver.org. 10 | version: 1.0.0 11 | executables: 12 | goCli: 13 | environment: 14 | sdk: ">=2.1.0 <3.0.0" 15 | 16 | dependencies: 17 | args: '^1.5.1' 18 | dart_inquirer: '^1.0.0' 19 | watcher: ^0.9.7+10 20 | mustache: ^1.1.1 21 | 22 | dev_dependencies: 23 | 24 | 25 | -------------------------------------------------------------------------------- /go-cli/src/command/build.dart: -------------------------------------------------------------------------------- 1 | // 2 | // Created with Android Studio. 3 | // User: 三帆 4 | // Date: 30/07/2019 5 | // Time: 16:51 6 | // email: sanfan.hx@alibaba-inc.com 7 | // target: build 8 | // 9 | 10 | 11 | import 'package:args/command_runner.dart'; 12 | import '../build/build_demo_list.dart'; 13 | import '../build/build_page_list.dart'; 14 | 15 | 16 | import 'dart:async'; 17 | 18 | 19 | class Build extends Command { 20 | @override 21 | final name = 'build'; 22 | @override 23 | final description = '生成索引等'; 24 | 25 | 26 | @override 27 | Future run() async { 28 | buildPageListJson(); 29 | buildDemoListJson(); 30 | return 0; 31 | } 32 | } -------------------------------------------------------------------------------- /go-cli/src/config.dart: -------------------------------------------------------------------------------- 1 | // 生成Demo的目录位置 2 | const TARGET_PAGE_DIC = 'lib/standard_pages'; 3 | const TARGET_DEMO_DIC = 'lib/page_demo_package'; 4 | 5 | -------------------------------------------------------------------------------- /go-cli/src/exception/demo.dart: -------------------------------------------------------------------------------- 1 | // 2 | // Created with Android Studio. 3 | // User: 三帆 4 | // Date: 25/05/2019 5 | // Time: 21:20 6 | // email: sanfan.hx@alibaba-inc.com 7 | // target: xxx 8 | // 9 | 10 | 11 | import 'package:console/console.dart'; 12 | 13 | class InvalidDemo implements Exception { 14 | final String details; 15 | InvalidDemo(this.details); 16 | 17 | @override 18 | String toString() { 19 | return format('{color.red}Invalid demo happends: $details {color.normal}'); 20 | } 21 | } -------------------------------------------------------------------------------- /go-cli/src/version.dart: -------------------------------------------------------------------------------- 1 | const packageVersion = '1.0.0'; -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vagrant/ 3 | .sconsign.dblite 4 | .svn/ 5 | 6 | .DS_Store 7 | *.swp 8 | profile 9 | 10 | DerivedData/ 11 | build/ 12 | GeneratedPluginRegistrant.h 13 | GeneratedPluginRegistrant.m 14 | 15 | .generated/ 16 | 17 | *.pbxuser 18 | *.mode1v3 19 | *.mode2v3 20 | *.perspectivev3 21 | 22 | !default.pbxuser 23 | !default.mode1v3 24 | !default.mode2v3 25 | !default.perspectivev3 26 | 27 | xcuserdata 28 | 29 | *.moved-aside 30 | 31 | *.pyc 32 | *sync/ 33 | Icon? 34 | .tags* 35 | 36 | /Flutter/app.flx 37 | /Flutter/app.zip 38 | /Flutter/flutter_assets/ 39 | /Flutter/App.framework 40 | /Flutter/Flutter.framework 41 | /Flutter/Generated.xcconfig 42 | /ServiceDefinitions.json 43 | 44 | Pods/ 45 | .symlinks/ 46 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/flutter_export_environment.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # This is a generated file; do not edit or check into version control. 3 | export "FLUTTER_ROOT=/Users/xj.deng/development/flutter" 4 | export "FLUTTER_APPLICATION_PATH=/Users/xj.deng/alibaba/xj_fluttergo/flutter-go" 5 | export "FLUTTER_TARGET=lib/main.dart" 6 | export "FLUTTER_BUILD_DIR=build" 7 | export "SYMROOT=${SOURCE_ROOT}/../build/ios" 8 | export "FLUTTER_FRAMEWORK_DIR=/Users/xj.deng/development/flutter/bin/cache/artifacts/engine/ios-release" 9 | export "FLUTTER_BUILD_NAME=1.0.6" 10 | export "FLUTTER_BUILD_NUMBER=1.0.6" 11 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildSystemType 6 | Original 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildSystemType 6 | Original 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | #include "FlutterJPushPlugin.h" 4 | 5 | @import Firebase;//增加 firebase 支持 6 | 7 | @implementation AppDelegate 8 | 9 | - (BOOL)application:(UIApplication *)application 10 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 11 | 12 | [FIRApp configure];//增加 firebase 支持 13 | 14 | [self startupJPush:launchOptions appKey:@"62eb07d227d1f11dd7fa6239" channel:@"jpush" isProduction:FALSE]; 15 | 16 | [GeneratedPluginRegistrant registerWithRegistry:self]; 17 | // Override point for customization after application launch. 18 | [NSThread sleepForTimeInterval:2]; 19 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/1024x1024@as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024x1024@as.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/120x120@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/120x120@2x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/120x120@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/120x120@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/152x152.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/167x167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/167x167.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/180x180@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/180x180@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/20x20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/20x20.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/29x29@1x-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/29x29@1x-2.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/40x40@1x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/40x40@1x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/40x40@1x-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/40x40@1x-2.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/58x58@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/58x58@2x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/58x58@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/58x58@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/76x76.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/80x80@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/80x80@2x-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/80x80@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/80x80@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/87x87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/AppIcon.appiconset/87x87.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "3x" 14 | } 15 | ], 16 | "info" : { 17 | "version" : 1, 18 | "author" : "xcode" 19 | } 20 | } -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Landscape@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPad Portrait@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina 4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina 4.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 4.7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 4.7.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 5.5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait-Retina HD 5.5.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone Portrait@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XR Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XR Portrait.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XS Max Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone XS Max Portrait.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone X_XS Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/Launch2.launchimage/iPhone X_XS Portrait.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "flutter go.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "flutter go-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "flutter go-2.png", 16 | "scale" : "3x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "1x" 21 | }, 22 | { 23 | "idiom" : "iphone", 24 | "scale" : "2x" 25 | }, 26 | { 27 | "idiom" : "iphone", 28 | "scale" : "3x" 29 | } 30 | ], 31 | "info" : { 32 | "version" : 1, 33 | "author" : "xcode" 34 | } 35 | } -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-1.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go-2.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/Runner/Assets.xcassets/LaunchImage.imageset/flutter go.png -------------------------------------------------------------------------------- /ios/Runner/Images.xcassets/LaunchImage-2.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "ipad", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "1x" 9 | }, 10 | { 11 | "orientation" : "landscape", 12 | "idiom" : "ipad", 13 | "extent" : "full-screen", 14 | "minimum-system-version" : "7.0", 15 | "scale" : "1x" 16 | }, 17 | { 18 | "orientation" : "portrait", 19 | "idiom" : "ipad", 20 | "extent" : "full-screen", 21 | "minimum-system-version" : "7.0", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "orientation" : "landscape", 26 | "idiom" : "ipad", 27 | "extent" : "full-screen", 28 | "minimum-system-version" : "7.0", 29 | "scale" : "2x" 30 | } 31 | ], 32 | "info" : { 33 | "version" : 1, 34 | "author" : "xcode" 35 | } 36 | } -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" -------------------------------------------------------------------------------- /ios/Runner/Runner.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char* argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ios/flutter go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/flutter go.png -------------------------------------------------------------------------------- /ios/launch/iPad Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPad Landscape.png -------------------------------------------------------------------------------- /ios/launch/iPad Landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPad Landscape@2x.png -------------------------------------------------------------------------------- /ios/launch/iPad Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPad Portrait.png -------------------------------------------------------------------------------- /ios/launch/iPad Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPad Portrait@2x.png -------------------------------------------------------------------------------- /ios/launch/iPhone Landscape-Retina HD 5.5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone Landscape-Retina HD 5.5.png -------------------------------------------------------------------------------- /ios/launch/iPhone Portrait-Retina 4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone Portrait-Retina 4.png -------------------------------------------------------------------------------- /ios/launch/iPhone Portrait-Retina HD 4.7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone Portrait-Retina HD 4.7.png -------------------------------------------------------------------------------- /ios/launch/iPhone Portrait-Retina HD 5.5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone Portrait-Retina HD 5.5.png -------------------------------------------------------------------------------- /ios/launch/iPhone Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone Portrait@2x.png -------------------------------------------------------------------------------- /ios/launch/iPhone XR Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone XR Landscape.png -------------------------------------------------------------------------------- /ios/launch/iPhone XR Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone XR Portrait.png -------------------------------------------------------------------------------- /ios/launch/iPhone XS Max Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone XS Max Landscape.png -------------------------------------------------------------------------------- /ios/launch/iPhone XS Max Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone XS Max Portrait.png -------------------------------------------------------------------------------- /ios/launch/iPhone X_XS Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone X_XS Landscape.png -------------------------------------------------------------------------------- /ios/launch/iPhone X_XS Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/ios/launch/iPhone X_XS Portrait.png -------------------------------------------------------------------------------- /lib/blocs/industry_event.dart: -------------------------------------------------------------------------------- 1 | /// 2 | /// Created with Android Studio. 3 | /// User: 一晟 4 | /// Date: 2019/4/28 5 | /// Time: 3:35 PM 6 | /// email: zhu.yan@alibaba-inc.com 7 | /// 8 | abstract class SuggestionEvent {} 9 | 10 | class SuggestionFetch extends SuggestionEvent { 11 | final String query; 12 | 13 | SuggestionFetch({this.query}); 14 | 15 | @override 16 | String toString() => 'SuggestionFetch:获取关键字提示事件'; 17 | } 18 | 19 | class SuggestionClearFetch extends SuggestionEvent { 20 | final String query; 21 | 22 | SuggestionClearFetch({this.query}); 23 | 24 | @override 25 | String toString() => 'SuggestionClearFetch:清空界面'; 26 | } 27 | -------------------------------------------------------------------------------- /lib/blocs/industry_state.dart: -------------------------------------------------------------------------------- 1 | /// 2 | /// Created with Android Studio. 3 | /// User: 一晟 4 | /// Date: 2019/4/28 5 | /// Time: 3:37 PM 6 | /// email: zhu.yan@alibaba-inc.com 7 | /// 8 | abstract class SuggestionState {} 9 | 10 | class SuggestionError extends SuggestionState { 11 | @override 12 | String toString() => 'SuggestionError:获取失败'; 13 | } 14 | 15 | class SuggestionUninitialized extends SuggestionState { 16 | @override 17 | String toString() => 'SuggestionUninitialized:未初始化'; 18 | } 19 | 20 | class SuggestionLoading extends SuggestionState { 21 | @override 22 | String toString() => 'SuggestionLoading :正在加载'; 23 | } 24 | 25 | class SuggestionLoaded extends SuggestionState { 26 | final List res; 27 | 28 | SuggestionLoaded({ 29 | this.res, 30 | }); 31 | 32 | @override 33 | String toString() => 'SuggestionLoaded:加载完毕'; 34 | } 35 | -------------------------------------------------------------------------------- /lib/blocs/search_result.dart: -------------------------------------------------------------------------------- 1 | /// 2 | /// Created with Android Studio. 3 | /// User: 一晟 4 | /// Date: 2019/4/28 5 | /// Time: 7:11 PM 6 | /// email: zhu.yan@alibaba-inc.com 7 | /// tartget: 8 | /// 9 | class SearchResult { 10 | String title; 11 | String source; 12 | 13 | SearchResult({this.title, this.source}); 14 | } 15 | -------------------------------------------------------------------------------- /lib/components/flutter_markdown/lib/flutter_markdown.dart: -------------------------------------------------------------------------------- 1 | // Copyright 2016 The Chromium Authors. All rights reserved. 2 | // Use of this source code is governed by a BSD-style license that can be 3 | // found in the LICENSE file. 4 | 5 | /// A library to render markdown formatted text. 6 | library flutter_markdown; 7 | 8 | export 'src/builder.dart'; 9 | export 'src/style_sheet.dart'; 10 | export 'src/widget.dart'; 11 | -------------------------------------------------------------------------------- /lib/components/markdown.dart: -------------------------------------------------------------------------------- 1 | import '../components/flutter_markdown/lib/flutter_markdown.dart' as md; 2 | import 'package:flutter/material.dart'; 3 | 4 | import 'package:flutter_go/utils/high_light_code.dart'; 5 | 6 | /// 使用方法 7 | /// MarkdownBody(markdown) 8 | final hightlighter = new HighLight(); 9 | 10 | class HighLight extends md.SyntaxHighlighter { 11 | @override 12 | TextSpan format(String source) { 13 | final SyntaxHighlighterStyle style = 14 | SyntaxHighlighterStyle.lightThemeStyle(); 15 | return TextSpan( 16 | style: const TextStyle(fontSize: 10.0), 17 | children: [DartSyntaxHighlighter(style).format(source)]); 18 | } 19 | } 20 | 21 | class MarkdownBody extends StatelessWidget { 22 | final String data; 23 | MarkdownBody(this.data); 24 | @override 25 | Widget build(BuildContext context) { 26 | return md.MarkdownBody(data: data, syntaxHighlighter: new HighLight()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/event/event_bus.dart: -------------------------------------------------------------------------------- 1 | import 'package:event_bus/event_bus.dart'; 2 | 3 | class ApplicationEvent { 4 | static EventBus event; 5 | } 6 | -------------------------------------------------------------------------------- /lib/event/event_model.dart: -------------------------------------------------------------------------------- 1 | class CollectionEvent { 2 | final String widgetName; 3 | final String router; 4 | final bool isRemove; 5 | // token uid... 6 | CollectionEvent(this.widgetName, this.router, this.isRemove); 7 | } 8 | 9 | class UserGithubOAuthEvent { 10 | final String loginName; 11 | final String token; 12 | final bool isSuccess; 13 | UserGithubOAuthEvent(this.loginName, this.token, this.isSuccess); 14 | } 15 | 16 | class UserSettingThemeColorEvent { 17 | final int settingThemeColor; 18 | UserSettingThemeColorEvent(this.settingThemeColor); 19 | } 20 | -------------------------------------------------------------------------------- /lib/model/base.dart: -------------------------------------------------------------------------------- 1 | import 'package:sqflite/sqflite.dart'; 2 | 3 | class BaseModel { 4 | Database db; 5 | final String table = ''; 6 | var query; 7 | BaseModel(this.db) { 8 | query = db.query; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/model/responseData.dart: -------------------------------------------------------------------------------- 1 | class ResponseData { 2 | int status; 3 | bool success; 4 | String message; 5 | 6 | ResponseData(this.status, this.success, this.message); 7 | 8 | ResponseData.fromJson(Map json) 9 | : status = json['status'], 10 | success = json['success'], 11 | message = json['message']; 12 | 13 | Map toJson() => 14 | {'status': status, 'success': success, 'messsage': message}; 15 | 16 | @override 17 | String toString() { 18 | return 'status: $status ,success: $success,message: ${message.toString()}'; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/model/story.dart: -------------------------------------------------------------------------------- 1 | class StoryModel { 2 | final String title; 3 | final String image; 4 | final int id; 5 | final String url; 6 | 7 | StoryModel(this.id, this.title, {this.image, this.url}); 8 | 9 | StoryModel.fromJson(Map json) 10 | : this( 11 | json['id'], 12 | json['title'], 13 | image: json['image'] != null 14 | ? json['image'] 15 | : (json['images'] != null ? json['images'][0] : null), 16 | url: json['url'] != null 17 | ? json['url'] 18 | : (json['url'] != null ? json['url'][0] : null), 19 | ); 20 | 21 | Map toJson() { 22 | return {'id': id, 'title': title, 'image': image, 'url': url}; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/model/user_info.dart: -------------------------------------------------------------------------------- 1 | class UserInformation { 2 | String username; 3 | int id; 4 | String avatarPic; 5 | String themeColor; 6 | 7 | UserInformation({ 8 | this.avatarPic, 9 | this.id, 10 | this.themeColor, 11 | this.username, 12 | }); 13 | 14 | factory UserInformation.fromJson(Map json) { 15 | print('fromJOSN $json ${json['id'].runtimeType}'); 16 | String name = json['name']; 17 | int userId; 18 | if (json['name'] == null) { 19 | name = json['url_name']; 20 | } 21 | if (json['id'].runtimeType == int) { 22 | userId = json['id']; 23 | } else { 24 | userId = int.parse(json['id']); 25 | } 26 | return UserInformation( 27 | avatarPic: json['avatar_pic'], 28 | id: userId, 29 | username: name, 30 | themeColor: json['theme_color']); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/model/version.dart: -------------------------------------------------------------------------------- 1 | class Data { 2 | String version; 3 | String name; 4 | 5 | Data.fromJson(Map json) 6 | : version = json['version'], 7 | name = json['name']; 8 | 9 | @override 10 | String toString() { 11 | return 'name: $name ,version: $version'; 12 | } 13 | } 14 | 15 | class Version { 16 | Data data; 17 | int status; 18 | bool success; 19 | 20 | Version.formJson(Map json) 21 | : status = json['status'], 22 | success = json['success'], 23 | data = Data.fromJson(json['data']); 24 | 25 | @override 26 | String toString() { 27 | return 'status: $status ,success: $success,date: ${data.toString()}'; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/page_demo_package/.demo.json: -------------------------------------------------------------------------------- 1 | [{"name":"PullToRefresh","screenShot":"","author":"chenfeihu","email":"763551832@qq.com","desc":"刷新组件","id":"5553db80_52ae_4241_9c8a_5c9e1f92b096"},{"name":"RangeSlider","screenShot":"","author":"RangeSlider","email":"hanxu317@qq.com","desc":"RangeSlider widget demo","id":"e5f958bc_52ae_4241_9c8a_5c9e1f92b096"},{"name":"demoName","screenShot":"","author":"yourName","email":"yourEmail","desc":"这是一个测试的标准demo","id":"1a29aa8e_32ae_4241_9c8a_5c9e1f92b096"},{"name":"local","screenShot":"","author":"ab","email":"email","desc":"ags","id":"2c1d57d0_42ae_4241_9c8a_5c9e1f92b096"}] -------------------------------------------------------------------------------- /lib/page_demo_package/PullToRefresh_chenfeihu_5553db80_52ae_4241_9c8a_5c9e1f92b096/.demo.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PullToRefresh", 3 | "screenShot": "", 4 | "author":"chenfeihu", 5 | "email": "763551832@qq.com", 6 | "desc": "刷新组件", 7 | "id": "5553db80_52ae_4241_9c8a_5c9e1f92b096" 8 | } 9 | -------------------------------------------------------------------------------- /lib/page_demo_package/PullToRefresh_chenfeihu_5553db80_52ae_4241_9c8a_5c9e1f92b096/index.dart: -------------------------------------------------------------------------------- 1 | // 2 | // Created with flutter go cli 3 | // User: chenfeihu 4 | // Time: 2019-09-24 12:11:14.085126 5 | // email: 763551832@qq.com 6 | // desc: 刷新组件 7 | // 8 | 9 | import 'src/index.dart'; 10 | 11 | var demoWidgets = [new Demo()]; 12 | -------------------------------------------------------------------------------- /lib/page_demo_package/RangeSlider_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096/.demo.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RangeSlider", 3 | "screenShot": "", 4 | "author":"RangeSlider", 5 | "email": "hanxu317@qq.com", 6 | "desc": "RangeSlider widget demo", 7 | "id": "e5f958bc_52ae_4241_9c8a_5c9e1f92b096" 8 | } 9 | -------------------------------------------------------------------------------- /lib/page_demo_package/RangeSlider_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096/index.dart: -------------------------------------------------------------------------------- 1 | // 2 | // Created with flutter go cli 3 | // User: RangeSlider 4 | // Time: 2019-09-12 15:11:05.512158 5 | // email: hanxu317@qq.com 6 | // desc: RangeSlider widget demo 7 | // 8 | 9 | import 'src/index.dart'; 10 | 11 | var demoWidgets = [new Demo()]; 12 | -------------------------------------------------------------------------------- /lib/page_demo_package/RangeSlider_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096/src/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Demo extends StatefulWidget { 4 | @override 5 | _State createState() => _State(); 6 | } 7 | 8 | class _State extends State { 9 | RangeValues valuess = RangeValues(20.0, 50.0); 10 | @override 11 | Widget build(BuildContext context) { 12 | return RangeSlider( 13 | values: valuess, 14 | //实际进度的位置 15 | inactiveColor: Colors.black12, 16 | //进度中不活动部分的颜色 17 | labels: RangeLabels('12', '23'), 18 | min: 0.0, 19 | max: 100.0, 20 | divisions: 1000, 21 | activeColor: Colors.blue, 22 | //进度中活动部分的颜色 23 | onChanged: (rangeValues) { 24 | setState(() { 25 | valuess = rangeValues; 26 | }); 27 | }, 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096/.demo.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demoName", 3 | "screenShot": "", 4 | "author":"yourName", 5 | "email": "yourEmail", 6 | "desc": "这是一个测试的标准demo", 7 | "id": "1a29aa8e_32ae_4241_9c8a_5c9e1f92b096" 8 | } 9 | -------------------------------------------------------------------------------- /lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096/index.dart: -------------------------------------------------------------------------------- 1 | // 2 | // Created with flutter go cli 3 | // User: yourName 4 | // Time: 2019-06-10 20:37:27.289097 5 | // email: yourEmail 6 | // desc: 这是一个测试的标准demo 7 | // 8 | 9 | import 'src/index.dart'; 10 | 11 | var demoWidgets = [new Demo()]; 12 | -------------------------------------------------------------------------------- /lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096/src/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Demo extends StatefulWidget { 4 | @override 5 | _State createState() => _State(); 6 | } 7 | 8 | class _State extends State { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | child: RaisedButton(onPressed: () {}, child: Text('我是md中引入的demo'))); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/page_demo_package/index.dart: -------------------------------------------------------------------------------- 1 | import 'PullToRefresh_chenfeihu_5553db80_52ae_4241_9c8a_5c9e1f92b096/index.dart' 2 | as StandardDemo_PullToRefresh_5553db80_52ae_4241_9c8a_5c9e1f92b096; 3 | import 'RangeSlider_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096/index.dart' 4 | as StandardDemo_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096; 5 | import 'demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096/index.dart' 6 | as StandardDemo_demoName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096; 7 | import 'local_ab_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096/index.dart' 8 | as StandardDemo_local_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096; 9 | 10 | var demoObjects = { 11 | '5553db80_52ae_4241_9c8a_5c9e1f92b096': 12 | StandardDemo_PullToRefresh_5553db80_52ae_4241_9c8a_5c9e1f92b096 13 | .demoWidgets, 14 | 'e5f958bc_52ae_4241_9c8a_5c9e1f92b096': 15 | StandardDemo_RangeSlider_e5f958bc_52ae_4241_9c8a_5c9e1f92b096.demoWidgets, 16 | '1a29aa8e_32ae_4241_9c8a_5c9e1f92b096': 17 | StandardDemo_demoName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096.demoWidgets, 18 | '2c1d57d0_42ae_4241_9c8a_5c9e1f92b096': 19 | StandardDemo_local_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096.demoWidgets 20 | }; 21 | -------------------------------------------------------------------------------- /lib/page_demo_package/info.json: -------------------------------------------------------------------------------- 1 | { 2 | "70c429df-c27d-4843-8e28-1e6885c9276b": { 3 | "name": "button-red", 4 | "screenShot": "", 5 | "author": "sanfan", 6 | "email": "sanfan.hx@alibaba-inc.com", 7 | "desc": "desc", 8 | } 9 | } 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /lib/page_demo_package/local_ab_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096/.demo.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "local", 3 | "screenShot": "", 4 | "author":"ab", 5 | "email": "email", 6 | "desc": "ags", 7 | "id": "2c1d57d0_42ae_4241_9c8a_5c9e1f92b096" 8 | } 9 | -------------------------------------------------------------------------------- /lib/page_demo_package/local_ab_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096/index.dart: -------------------------------------------------------------------------------- 1 | // 2 | // Created with flutter go cli 3 | // User: ab 4 | // Time: 2019-08-06 17:26:02.905889 5 | // email: email 6 | // desc: ags 7 | // 8 | 9 | import 'src/index.dart'; 10 | 11 | var demoWidgets = [new Demo()]; 12 | -------------------------------------------------------------------------------- /lib/page_demo_package/local_ab_2c1d57d0_42ae_4241_9c8a_5c9e1f92b096/src/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Demo extends StatefulWidget { 4 | @override 5 | _State createState() => _State(); 6 | } 7 | 8 | class _State extends State { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | child: Text("this is flutter go init demo"), 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/page_demo_package/readme.md: -------------------------------------------------------------------------------- 1 | # 目录说明 2 | 3 | 本目录文件结构与文件命名, 使用cli进行更新 4 | 5 | 6 | # demos 目录文件结构 7 | 8 | ``` 9 | demos 10 | ├── ${demoName}-${author}-${32位demoID} 11 | │   ├── index.dart 12 | │   └── src 13 | │   ├── .demo.json 14 | │   └── ${demoName}.dart 15 | ├── ...${demoName}-${author}-${32位demoID} 16 | ├── index.dart 17 | ├── info.json 18 | └── readme.md 19 | ``` 20 | -------------------------------------------------------------------------------- /lib/resources/shared_preferences_keys.dart: -------------------------------------------------------------------------------- 1 | // Created with Android Studio. 2 | // User: 三帆 3 | // Date: 31/01/2019 4 | // Time: 18:13 5 | // email: sanfan.hx@alibaba-inc.com 6 | // target: xxx 7 | // 8 | 9 | //enum DateType { 10 | // Int, 11 | // Double, 12 | // Bool, 13 | // String, 14 | // Dynamic 15 | //} 16 | 17 | //class spKey { 18 | // String name; 19 | // DateType type; 20 | // 21 | // spKey({this.name, this.type}); 22 | //} 23 | 24 | class SharedPreferencesKeys { 25 | /// boolean 26 | /// 用于欢迎页面. 只有第一次访问才会显示. 或者手动将这个值设为false 27 | static String showWelcome = 'loginWelcone'; 28 | 29 | /// json 30 | /// 用于存放搜索页的搜索数据. 31 | /// [{ 32 | /// name: 'name' 33 | /// 34 | /// }] 35 | static String searchHistory = 'searchHistory'; 36 | } 37 | -------------------------------------------------------------------------------- /lib/routers/application.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:fluro/fluro.dart'; 3 | import 'package:flutter_go/utils/shared_preferences.dart'; 4 | 5 | import '../model/widget.dart'; 6 | 7 | enum ENV { 8 | PRODUCTION, 9 | DEV, 10 | } 11 | 12 | class Application { 13 | /// 通过Application设计环境变量 14 | static ENV env = ENV.DEV; 15 | 16 | static Router router; 17 | static TabController controller; 18 | static SpUtil sharePeference; 19 | static CategoryComponent widgetTree; 20 | static bool pageIsOpen = false; 21 | 22 | static Map github = { 23 | 'widgetsURL': 24 | 'https://github.com/alibaba/flutter-go/blob/develop/lib/widgets/', 25 | //'develop':'https://github.com/alibaba-paimai-frontend/flutter-common-widgets-app/tree/develop/lib/widgets/', 26 | //'master':'https://github.com/alibaba-paimai-frontend/flutter-common-widgets-app/tree/master/lib/widgets/' 27 | }; 28 | 29 | /// 所有获取配置的唯一入口 30 | Map get config { 31 | if (Application.env == ENV.PRODUCTION) { 32 | return {}; 33 | } 34 | if (Application.env == ENV.DEV) { 35 | return {}; 36 | } 37 | return {}; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/standard_pages/.pages.json: -------------------------------------------------------------------------------- 1 | [{"name":"PullToRefresh","screenShot":"","author":"chenfeihu","title":"PullToRefresh","email":"763551832@qq.com","desc":"Refresh conponent","id":"cd9b8b80_52ae_4241_9c8a_5c9e1f92b096"},{"name":"local","screenShot":"","author":"hnaxu","title":"本地","email":"hanxu@qq.com","desc":"desc","id":"5d7178d0_42ae_4241_9c8a_5c9e1f92b096"},{"name":"test","screenShot":"","author":"abc","title":"ya","email":"adsf.com","desc":"desc","id":"84f38e00_42ae_4241_9c8a_5c9e1f92b096"},{"name":"standard","screenShot":"","author":"sanfan","title":"介绍页","email":"hanxu317@qq.com","desc":"desc","id":"ee4feb8e_32ae_4241_9c8a_5c9e1f92b096"},{"name":"standard_for_slider","screenShot":"","author":"sanfan","title":"slider组件","email":"hanxu@qq.com","desc":"slider, new Slider","id":"8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096"},{"name":"RangeSlider","screenShot":"","author":"hanxu","title":"RangeSlider","email":"hanxu317@qq.com","desc":"RangeSlider widget","id":"cbffbf7c_52ae_4241_9c8a_5c9e1f92b096"}] -------------------------------------------------------------------------------- /lib/standard_pages/PullToRefresh_chenfeihu_cd9b8b80_52ae_4241_9c8a_5c9e1f92b096/.page.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PullToRefresh", 3 | "screenShot": "", 4 | "author":"chenfeihu", 5 | "title":"PullToRefresh", 6 | "email": "763551832@qq.com", 7 | "desc": "Refresh conponent", 8 | "id": "cd9b8b80_52ae_4241_9c8a_5c9e1f92b096" 9 | } 10 | -------------------------------------------------------------------------------- /lib/standard_pages/RangeSlider_hanxu_cbffbf7c_52ae_4241_9c8a_5c9e1f92b096/.page.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RangeSlider", 3 | "screenShot": "", 4 | "author":"hanxu", 5 | "title":"RangeSlider", 6 | "email": "hanxu317@qq.com", 7 | "desc": "RangeSlider widget", 8 | "id": "cbffbf7c_52ae_4241_9c8a_5c9e1f92b096" 9 | } 10 | -------------------------------------------------------------------------------- /lib/standard_pages/RangeSlider_hanxu_cbffbf7c_52ae_4241_9c8a_5c9e1f92b096/index.dart: -------------------------------------------------------------------------------- 1 | String getMd() { 2 | return """ 3 | # RangeSlider 4 | 5 | > 用来选择范围性的数据 6 | 7 | slider 用来选择连续性的或者非连续性的数据. 默认是在一段最大值最小值间做任意值的选择. 如果你想选择间隔性的值, 例如0.0到50.0间,选择10, 15,...50.0这样的值, 给divisions设定一个非空的整数5,, 去分割区间范围. 8 | 9 | 10 | ### **基本用法** 11 | 12 | 关于slider有以下的术语: 13 | 14 | * **thumb** 滑块 用户可以水平拖拽移动的区域 15 | 16 | * **track** 滑轨 thumb 可以滑动的线条区域 17 | 18 | * **value indicator** 值指示器 当用户拖拽thumb的时候. 显示用户当前所选的属性值 19 | 20 | * **active** 选中区 21 | 22 | * **inactive** 非选中区 23 | 24 | 如果**onChanged**属性为空或者**min** .. **max**给出的范围 为空(例如如果min等于max),则将禁用滑块。 25 | 26 | 滑块小部件本身不保持任何状态State。相反,当滑块状态发生变化时,窗口小部件会调用 **onChanged** 回调。大多数使用滑块的小部件将侦听 **onChanged** 回调并使用新值重建滑块以更新滑块的视觉外观。要知道值何时开始更改,或何时更改,请设置可选回调**onChangeStart**或**onChangeEnd**。 27 | 28 | 默认情况下,滑块将尽可能宽,垂直居中。当给定无限制约束时,它将尝试使轨道宽144像素(每边有边距)并垂直收缩。 29 | 30 | ### 实例展示 31 | 32 | [demo:e5f958bc_52ae_4241_9c8a_5c9e1f92b096]"""; 33 | } 34 | -------------------------------------------------------------------------------- /lib/standard_pages/RangeSlider_hanxu_cbffbf7c_52ae_4241_9c8a_5c9e1f92b096/index.md: -------------------------------------------------------------------------------- 1 | # RangeSlider 2 | 3 | > 用来选择范围性的数据 4 | 5 | slider 用来选择连续性的或者非连续性的数据. 默认是在一段最大值最小值间做任意值的选择. 如果你想选择间隔性的值, 例如0.0到50.0间,选择10, 15,...50.0这样的值, 给divisions设定一个非空的整数5,, 去分割区间范围. 6 | 7 | 8 | ### **基本用法** 9 | 10 | 关于slider有以下的术语: 11 | 12 | * **thumb** 滑块 用户可以水平拖拽移动的区域 13 | 14 | * **track** 滑轨 thumb 可以滑动的线条区域 15 | 16 | * **value indicator** 值指示器 当用户拖拽thumb的时候. 显示用户当前所选的属性值 17 | 18 | * **active** 选中区 19 | 20 | * **inactive** 非选中区 21 | 22 | 如果**onChanged**属性为空或者**min** .. **max**给出的范围 为空(例如如果min等于max),则将禁用滑块。 23 | 24 | 滑块小部件本身不保持任何状态State。相反,当滑块状态发生变化时,窗口小部件会调用 **onChanged** 回调。大多数使用滑块的小部件将侦听 **onChanged** 回调并使用新值重建滑块以更新滑块的视觉外观。要知道值何时开始更改,或何时更改,请设置可选回调**onChangeStart**或**onChangeEnd**。 25 | 26 | 默认情况下,滑块将尽可能宽,垂直居中。当给定无限制约束时,它将尝试使轨道宽144像素(每边有边距)并垂直收缩。 27 | 28 | ### 实例展示 29 | 30 | [demo:e5f958bc_52ae_4241_9c8a_5c9e1f92b096] -------------------------------------------------------------------------------- /lib/standard_pages/local_hnaxu_5d7178d0_42ae_4241_9c8a_5c9e1f92b096/.page.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "local", 3 | "screenShot": "", 4 | "author":"hnaxu", 5 | "title":"本地", 6 | "email": "hanxu@qq.com", 7 | "desc": "desc", 8 | "id": "5d7178d0_42ae_4241_9c8a_5c9e1f92b096" 9 | } 10 | -------------------------------------------------------------------------------- /lib/standard_pages/local_hnaxu_5d7178d0_42ae_4241_9c8a_5c9e1f92b096/index.dart: -------------------------------------------------------------------------------- 1 | String getMd() { 2 | return """ 3 | # 标准的详情页 4 | 5 | 您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件 6 | 7 | 您可以通过goCli创建详情页所需要的demo 8 | 9 | ``` 10 | goCLi createDemo 11 | ``` 12 | 13 | 在flutter go 根文件下通过命令行输入以上命令可以进行以下操作 14 | 15 | [✓] 请输入新增加的demo名称? demoName 16 | 17 | [✓] 请输入您的姓名(使用英文) yourName 18 | 19 | [✓] 请输入您的github的email地址 yourEmail 20 | 21 | [✓] 请输入您demo的描述 这是一个测试的标准demo 22 | 23 | 24 | 在完成以上操作后, 可以得到这样的输出: 25 | 26 | 27 | ``` 28 | ------------------ 29 | 您新增的组件信息如下 30 | ================== 31 | { 32 | name : demoName 33 | author : yourName 34 | email : yourEmail 35 | desc : 这是一个测试的标准demo 36 | } 37 | ================== 38 | [✓] Is this the config you want ? (Y/n) y 39 | { 40 | 新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 41 | demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 42 | markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 43 | } 44 | 45 | ``` 46 | 您可以在任意详情页中, 通过以下方式调用 47 | 48 | ``` 49 | [demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 50 | ```"""; 51 | } 52 | -------------------------------------------------------------------------------- /lib/standard_pages/local_hnaxu_5d7178d0_42ae_4241_9c8a_5c9e1f92b096/index.md: -------------------------------------------------------------------------------- 1 | # 标准的详情页 this is test 2 | 您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件 3 | 4 | 您可以通过goCli创建详情页所需要的demo 5 | 6 | ``` 7 | goCLi createDemo 8 | ``` 9 | 10 | 在flutter go 根文件下通过命令行输入以上命令可以进行以下操作 11 | 12 | [✓] 请输入新增加的demo名称? demoName 13 | 14 | [✓] 请输入您的姓名(使用英文) yourName 15 | 16 | [✓] 请输入您的github的email地址 yourEmail 17 | 18 | [✓] 请输入您demo的描述 这是一个测试的标准demo 19 | 20 | 21 | 在完成以上操作后, 可以得到这样的输出: 22 | 23 | 24 | ``` 25 | ------------------ 26 | 您新增的组件信息如下 27 | ================== 28 | { 29 | name : demoName 30 | author : yourName 31 | email : yourEmail 32 | desc : 这是一个测试的标准demo 33 | } 34 | ================== 35 | [✓] Is this the config you want ? (Y/n) y 36 | { 37 | 新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 38 | demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 39 | markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 40 | } 41 | 42 | ``` 43 | 您可以在任意详情页中, 通过以下方式调用 44 | 45 | ``` 46 | [demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 47 | ``` 48 | -------------------------------------------------------------------------------- /lib/standard_pages/standard_for_slider_sanfan_8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096/.page.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "standard_for_slider", 3 | "screenShot": "", 4 | "author":"sanfan", 5 | "title":"slider组件", 6 | "email": "hanxu@qq.com", 7 | "desc": "slider, new Slider", 8 | "id": "8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096" 9 | } 10 | -------------------------------------------------------------------------------- /lib/standard_pages/standard_for_slider_sanfan_8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096/index.dart: -------------------------------------------------------------------------------- 1 | String getMd() { 2 | return """ 3 | # Slider Page 4 | 5 | 您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件 6 | 7 | 您可以通过goCli创建详情页所需要的demo 8 | 9 | 10 | 11 | 12 | ``` 13 | goCLi createDemo 14 | ``` 15 | 16 | 在flutter go 根文件下通过命令行输入以上命令可以进行以下操作 17 | 18 | [✓] 请输入新增加的demo名称? demoName 19 | 20 | [✓] 请输入您的姓名(使用英文) yourName 21 | 22 | [✓] 请输入您的github的email地址 yourEmail 23 | 24 | [✓] 请输入您demo的描述 这是一个测试的标准demo 25 | 26 | 27 | 在完成以上操作后, 可以得到这样的输出: 28 | 29 | 30 | ``` 31 | ------------------ 32 | 您新增的组件信息如下 33 | ================== 34 | { 35 | name : demoName 36 | author : yourName 37 | email : yourEmail 38 | desc : 这是一个测试的标准demo 39 | } 40 | ================== 41 | [✓] Is this the config you want ? (Y/n) y 42 | { 43 | 新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 44 | demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 45 | markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 46 | } 47 | 48 | ``` 49 | 您可以在任意详情页中, 通过以下方式调用 50 | 51 | ``` 52 | [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 53 | ``` 54 | 55 | 调用效果: 56 | 57 | [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096]"""; 58 | } 59 | -------------------------------------------------------------------------------- /lib/standard_pages/standard_for_slider_sanfan_8ab2b5c2_42ae_4241_9c8a_5c9e1f92b096/index.md: -------------------------------------------------------------------------------- 1 | # Slider Page 2 | 3 | 您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件 4 | 5 | 您可以通过goCli创建详情页所需要的demo 6 | 7 | 8 | 9 | 10 | ``` 11 | goCLi createDemo 12 | ``` 13 | 14 | 在flutter go 根文件下通过命令行输入以上命令可以进行以下操作 15 | 16 | [✓] 请输入新增加的demo名称? demoName 17 | 18 | [✓] 请输入您的姓名(使用英文) yourName 19 | 20 | [✓] 请输入您的github的email地址 yourEmail 21 | 22 | [✓] 请输入您demo的描述 这是一个测试的标准demo 23 | 24 | 25 | 在完成以上操作后, 可以得到这样的输出: 26 | 27 | 28 | ``` 29 | ------------------ 30 | 您新增的组件信息如下 31 | ================== 32 | { 33 | name : demoName 34 | author : yourName 35 | email : yourEmail 36 | desc : 这是一个测试的标准demo 37 | } 38 | ================== 39 | [✓] Is this the config you want ? (Y/n) y 40 | { 41 | 新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 42 | demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 43 | markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 44 | } 45 | 46 | ``` 47 | 您可以在任意详情页中, 通过以下方式调用 48 | 49 | ``` 50 | [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 51 | ``` 52 | 53 | 调用效果: 54 | 55 | [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] -------------------------------------------------------------------------------- /lib/standard_pages/standard_sanfan_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096/.page.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "standard", 3 | "screenShot": "", 4 | "author":"sanfan", 5 | "title":"介绍页", 6 | "email": "hanxu317@qq.com", 7 | "desc": "desc", 8 | "id": "ee4feb8e_32ae_4241_9c8a_5c9e1f92b096" 9 | } 10 | -------------------------------------------------------------------------------- /lib/standard_pages/standard_sanfan_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096/index.dart: -------------------------------------------------------------------------------- 1 | String getMd() { 2 | return """ 3 | # 标准的详情页 4 | 5 | 您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件 6 | 7 | 您可以通过goCli创建详情页所需要的demo 8 | [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 9 | 10 | 11 | ``` 12 | goCLi createDemo 13 | ``` 14 | 15 | 在flutter go 根文件下通过命令行输入以上命令可以进行以下操作 16 | 17 | [✓] 请输入新增加的demo名称? demoName 18 | 19 | [✓] 请输入您的姓名(使用英文) yourName 20 | 21 | [✓] 请输入您的github的email地址 yourEmail 22 | 23 | [✓] 请输入您demo的描述 这是一个测试的标准demo 24 | 25 | 26 | 在完成以上操作后, 可以得到这样的输出: 27 | 28 | 29 | ``` 30 | ------------------ 31 | 您新增的组件信息如下 32 | ================== 33 | { 34 | name : demoName 35 | author : yourName 36 | email : yourEmail 37 | desc : 这是一个测试的标准demo 38 | } 39 | ================== 40 | [✓] Is this the config you want ? (Y/n) y 41 | { 42 | 新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 43 | demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 44 | markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 45 | } 46 | 47 | ``` 48 | 您可以在任意详情页中, 通过以下方式调用 49 | 50 | ``` 51 | [demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 52 | ```"""; 53 | } 54 | -------------------------------------------------------------------------------- /lib/standard_pages/standard_sanfan_ee4feb8e_32ae_4241_9c8a_5c9e1f92b096/index.md: -------------------------------------------------------------------------------- 1 | # 标准的详情页 this is title 2 | 3 | 您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件 4 | 5 | 您可以通过goCli创建详情页所需要的demo 6 | [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 7 | 8 | 9 | ``` 10 | goCLi createDemo 11 | ``` 12 | 13 | 在flutter go 根文件下通过命令行输入以上命令可以进行以下操作 14 | 15 | [✓] 请输入新增加的demo名称? demoName 16 | 17 | [✓] 请输入您的姓名(使用英文) yourName 18 | 19 | [✓] 请输入您的github的email地址 yourEmail 20 | 21 | [✓] 请输入您demo的描述 这是一个测试的标准demo 22 | 23 | 24 | 在完成以上操作后, 可以得到这样的输出: 25 | 26 | 27 | ``` 28 | ------------------ 29 | 您新增的组件信息如下 30 | ================== 31 | { 32 | name : demoName 33 | author : yourName 34 | email : yourEmail 35 | desc : 这是一个测试的标准demo 36 | } 37 | ================== 38 | [✓] Is this the config you want ? (Y/n) y 39 | { 40 | 新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 41 | demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 42 | markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 43 | } 44 | 45 | ``` 46 | 您可以在任意详情页中, 通过以下方式调用 47 | 48 | ``` 49 | [demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 50 | ``` 51 | -------------------------------------------------------------------------------- /lib/standard_pages/test_abc_84f38e00_42ae_4241_9c8a_5c9e1f92b096/.page.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "screenShot": "", 4 | "author":"abc", 5 | "title":"ya", 6 | "email": "adsf.com", 7 | "desc": "desc", 8 | "id": "84f38e00_42ae_4241_9c8a_5c9e1f92b096" 9 | } 10 | -------------------------------------------------------------------------------- /lib/standard_pages/test_abc_84f38e00_42ae_4241_9c8a_5c9e1f92b096/index.dart: -------------------------------------------------------------------------------- 1 | String getMd() { 2 | return """ 3 | # 标准的详情页 4 | 5 | 您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件 6 | 7 | 您可以通过goCli创建详情页所需要的demo 8 | 9 | ``` 10 | goCLi createDemo 11 | ``` 12 | 13 | 在flutter go 根文件下通过命令行输入以上命令可以进行以下操作 14 | 15 | [✓] 请输入新增加的demo名称? demoName 16 | 17 | [✓] 请输入您的姓名(使用英文) yourName 18 | 19 | [✓] 请输入您的github的email地址 yourEmail 20 | 21 | [✓] 请输入您demo的描述 这是一个测试的标准demo 22 | 23 | 24 | 在完成以上操作后, 可以得到这样的输出: 25 | 26 | 27 | ``` 28 | ------------------ 29 | 您新增的组件信息如下 30 | ================== 31 | { 32 | name : demoName 33 | author : yourName 34 | email : yourEmail 35 | desc : 这是一个测试的标准demo 36 | } 37 | ================== 38 | [✓] Is this the config you want ? (Y/n) y 39 | { 40 | 新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 41 | demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 42 | markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 43 | } 44 | 45 | ``` 46 | 您可以在任意详情页中, 通过以下方式调用 47 | 48 | ``` 49 | [demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 50 | ```"""; 51 | } 52 | -------------------------------------------------------------------------------- /lib/standard_pages/test_abc_84f38e00_42ae_4241_9c8a_5c9e1f92b096/index.md: -------------------------------------------------------------------------------- 1 | # 标准的详情页 2 | 3 | 您可以在这个界面中, 编写大多数的markdown文案, 他会在 **goCli watch** 下同步被编译成 **dart** 文件 4 | 5 | 您可以通过goCli创建详情页所需要的demo 6 | 7 | ``` 8 | goCLi createDemo 9 | ``` 10 | 11 | 在flutter go 根文件下通过命令行输入以上命令可以进行以下操作 12 | 13 | [✓] 请输入新增加的demo名称? demoName 14 | 15 | [✓] 请输入您的姓名(使用英文) yourName 16 | 17 | [✓] 请输入您的github的email地址 yourEmail 18 | 19 | [✓] 请输入您demo的描述 这是一个测试的标准demo 20 | 21 | 22 | 在完成以上操作后, 可以得到这样的输出: 23 | 24 | 25 | ``` 26 | ------------------ 27 | 您新增的组件信息如下 28 | ================== 29 | { 30 | name : demoName 31 | author : yourName 32 | email : yourEmail 33 | desc : 这是一个测试的标准demo 34 | } 35 | ================== 36 | [✓] Is this the config you want ? (Y/n) y 37 | { 38 | 新建的demo文件位于 : /flutter go/lib/page_demo_package/demoName_yourName_1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 39 | demoId为 : 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096 40 | markdown中调用方式 : [demo:1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 41 | } 42 | 43 | ``` 44 | 您可以在任意详情页中, 通过以下方式调用 45 | 46 | ``` 47 | [demo: 1a29aa8e_32ae_4241_9c8a_5c9e1f92b096] 48 | ``` -------------------------------------------------------------------------------- /lib/utils/analytics.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_analytics/firebase_analytics.dart'; 2 | import 'package:firebase_analytics/observer.dart'; 3 | 4 | //统计 5 | FirebaseAnalytics analytics = FirebaseAnalytics(); 6 | FirebaseAnalyticsObserver observer = 7 | FirebaseAnalyticsObserver(analytics: analytics); 8 | -------------------------------------------------------------------------------- /lib/utils/example_code_parser.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2019-01-14 11:42:36 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2019-01-14 16:53:11 5 | 6 | import 'dart:async'; 7 | 8 | import 'package:flutter/services.dart'; 9 | import 'package:url_launcher/url_launcher.dart'; 10 | import 'package:flutter/material.dart'; 11 | 12 | import 'package:flutter_go/routers/application.dart'; 13 | 14 | Map _exampleCode; 15 | String _code; 16 | 17 | void _launchURL(String url) async { 18 | if (await canLaunch(url)) { 19 | await launch(url); 20 | } else { 21 | throw 'Could not launch $url'; 22 | } 23 | } 24 | 25 | Future getExampleCode( 26 | context, String filePath, AssetBundle bundle) async { 27 | if (_exampleCode == null) await _parseExampleCode(context, filePath, bundle); 28 | return _code; 29 | } 30 | 31 | Future _parseExampleCode( 32 | context, String filePath, AssetBundle bundle) async { 33 | String code; 34 | try { 35 | code = await bundle.loadString('lib/widgets/$filePath'); 36 | } catch (err) { 37 | Navigator.of(context).pop(); 38 | _launchURL(Application.github['widgetsURL'] + filePath); 39 | } 40 | _code = code; 41 | } 42 | -------------------------------------------------------------------------------- /lib/utils/style.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | //颜色配置 4 | class AppColor { 5 | static const int white = 0xFFFFFFFF; 6 | static const int mainTextColor = 0xFF121917; 7 | static const int subTextColor = 0xff959595; 8 | } 9 | 10 | //文本设置 11 | class AppText { 12 | static const middleSize = 16.0; 13 | 14 | static const middleText = TextStyle( 15 | color: Color(AppColor.mainTextColor), 16 | fontSize: middleSize, 17 | ); 18 | 19 | static const middleSubText = TextStyle( 20 | color: Color(AppColor.subTextColor), 21 | fontSize: middleSize, 22 | ); 23 | } 24 | 25 | class WidgetDemoColor { 26 | static const int fontColor = 0xFF607173; 27 | static const int iconColor = 0xFF607173; 28 | static const int borderColor = 0xFFEFEFEF; 29 | } 30 | -------------------------------------------------------------------------------- /lib/views/fourth_page/page_reveal.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class PageReveal extends StatelessWidget { 6 | final double revealPercent; 7 | final Widget child; 8 | 9 | PageReveal({this.revealPercent, this.child}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return ClipOval( 14 | clipper: new CircleRevealClipper(revealPercent), 15 | child: child, 16 | ); 17 | } 18 | } 19 | 20 | class CircleRevealClipper extends CustomClipper { 21 | final double revealPercent; 22 | 23 | CircleRevealClipper(this.revealPercent); 24 | 25 | @override 26 | Rect getClip(Size size) { 27 | final epicenter = new Offset(size.width / 2, size.height * 0.9); 28 | 29 | double theta = atan(epicenter.dy / epicenter.dx); 30 | final distanceToCorner = epicenter.dy / sin(theta); 31 | 32 | final radius = distanceToCorner * revealPercent; 33 | final diameter = 2 * radius; 34 | 35 | return new Rect.fromLTWH( 36 | epicenter.dx - radius, epicenter.dy - radius, diameter, diameter); 37 | } 38 | 39 | @override 40 | bool shouldReclip(CustomClipper oldClipper) { 41 | return true; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/views/user_page/user_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_go/model/user_info.dart'; 3 | import 'package:flutter_go/views/first_page/drawer_page.dart'; 4 | 5 | class UserPage extends StatefulWidget { 6 | final UserInformation userInfo; 7 | 8 | UserPage({Key key, this.userInfo}) : super(key: key); 9 | 10 | @override 11 | _UserPageState createState() => _UserPageState(); 12 | } 13 | 14 | class _UserPageState extends State { 15 | @override 16 | Widget build(BuildContext context) { 17 | print(widget.userInfo); 18 | return Scaffold( 19 | body: Container( 20 | child: DrawerPage( 21 | userInfo: widget.userInfo, 22 | ), 23 | ), 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/views/welcome_page/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 14/01/2019 4 | /// Time: 23:00 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter/widgets.dart'; 10 | 11 | import 'package:flutter_go/views/welcome_page/fourth_page.dart'; 12 | 13 | class WelcomePage extends StatefulWidget { 14 | WelcomePage({Key key}) : super(key: key); 15 | 16 | @override 17 | _WelcomePageState createState() { 18 | return new _WelcomePageState(); 19 | } 20 | } 21 | 22 | class _WelcomePageState extends State { 23 | @override 24 | Widget build(BuildContext context) { 25 | return new Container(color: Colors.white, child: FourthPage()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/widgets/404.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class WidgetNotFound extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Scaffold( 7 | appBar: AppBar( 8 | title: Text("widget not found"), 9 | ), 10 | body: Container(child: Text("widget not found"))); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/widgets/components/Bar/SnackBarAction/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: sanfan.hx 3 | /// Date: 2019/1/6 4 | /// Time: 下午17:08 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: SnackBarAction 的示例 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | import './demo.dart' as SnackBarDemo; 12 | 13 | const String _Text0 = """ 14 | ### **简介** 15 | > SnackBarAction “屏幕底部消息右侧可操作的行为” 16 | 17 | - 带有可选操作的轻量级消息,短暂显示在屏幕底部, 并提供按钮交互。 18 | 19 | ### **基本用法** 20 | 21 | > 为SnackBar加入action[SnackBarAction]显示按区, 默认下是隐藏的 22 | 23 | """; 24 | 25 | class Demo extends StatefulWidget { 26 | static const String routeName = '/components/Bar/SnackBarAction'; 27 | 28 | @override 29 | _DemoState createState() => _DemoState(); 30 | } 31 | 32 | class _DemoState extends State { 33 | @override 34 | Widget build(BuildContext context) { 35 | return WidgetDemo( 36 | title: 'SnackBarAction', 37 | codeUrl: 'components/Bar/SnackBarAction/demo.dart', 38 | contentList: [ 39 | _Text0, 40 | SnackBarDemo.SnackBarActionDemo(), 41 | ], 42 | docUrl: 43 | 'https://docs.flutter.io/flutter/material/SnackBarAction-class.html', 44 | ); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/widgets/components/Card/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 一晟 3 | /// Date: 2018/12/27 4 | /// Time: 下午2:50 5 | /// email: zhu.yan@alibaba-inc.com 6 | /// target: Card 的示例 7 | 8 | import "package:flutter/material.dart"; 9 | 10 | import '../../../model/widget.dart'; 11 | import 'Card/index.dart' as Card; 12 | 13 | List widgetPoints = [ 14 | WidgetPoint( 15 | name: 'Card', 16 | routerName: Card.Demo.routeName, 17 | buildRouter: (BuildContext context) => Card.Demo(), 18 | ) 19 | ]; 20 | -------------------------------------------------------------------------------- /lib/widgets/components/Chip/Chip/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-18 11:40:57 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-18 15:13:23 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import 'demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > chip是表示属性,文本,实体或动作的元素 14 | - 需要在Material wedige 中。 15 | '''; 16 | const String content1 = ''' 17 | ### **基本用法** 18 | - 需要Material widget. 19 | - 这个label和clipBehavior参数不能为空 20 | '''; 21 | 22 | class Demo extends StatefulWidget { 23 | static const String routeName = '/components/Chip/Chip'; 24 | _DemoState createState() => _DemoState(); 25 | } 26 | 27 | class _DemoState extends State { 28 | @override 29 | Widget build(BuildContext context) { 30 | return WidgetDemo( 31 | contentList: [ 32 | content0, 33 | content1, 34 | ChipDemo(), 35 | ], 36 | codeUrl: 'components/Chip/Chip/demo.dart', 37 | docUrl: 'https://docs.flutter.io/flutter/material/Chip-class.html', 38 | title: 'Chip'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/widgets/components/Chip/ChipTheme/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-18 15:14:03 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-18 15:14:03 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import 'demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 基于 RawChip-based widgets,如chip,inputChip,ChoiceChip,FilterChip等 14 | - chipTheme描述了应用它的chip的颜色,形状和文本样式 15 | 16 | '''; 17 | const String content1 = ''' 18 | ### **基本用法** 19 | - 可通过chipTheme.of获取当前主题的ChipThemeData对象 20 | - 当widget使用ChipTheme.of时,如果主题稍后更改,则会自动重建。 21 | '''; 22 | 23 | class Demo extends StatefulWidget { 24 | static const String routeName = '/components/Chip/ChipTheme'; 25 | _DemoState createState() => _DemoState(); 26 | } 27 | 28 | class _DemoState extends State { 29 | @override 30 | Widget build(BuildContext context) { 31 | return WidgetDemo( 32 | contentList: [ 33 | content0, 34 | content1, 35 | ChipThemeDemo(), 36 | ], 37 | codeUrl: 'components/Chip/ChipTheme/demo.dart', 38 | docUrl: 'https://docs.flutter.io/flutter/material/ChipTheme-class.html', 39 | title: 'ChipTheme'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/widgets/components/Chip/ChipThemeData/demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-18 15:14:10 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-18 19:39:41 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | class ChipThemeDemo extends StatefulWidget { 9 | _ChipThemeDemoState createState() => _ChipThemeDemoState(); 10 | } 11 | 12 | class _ChipThemeDemoState extends State { 13 | Color _color = Colors.red; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return ChipTheme( 18 | data: ChipThemeData.fromDefaults( 19 | // brightness: Brightness.dark, 20 | labelStyle: TextStyle(fontSize: 15.0), 21 | primaryColor: Colors.red, 22 | secondaryColor: Colors.red.shade800), 23 | child: ChoiceChip( 24 | padding: 25 | EdgeInsets.only(left: 100.0, right: 100.0, top: 10.0, bottom: 10.0), 26 | label: Text('down'), 27 | onSelected: (bool value) { 28 | setState(() { 29 | _color = value ? Colors.black : Colors.red; 30 | }); 31 | }, 32 | selected: _color == Colors.black, 33 | ), 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/widgets/components/Chip/ChoiceChip/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-19 15:13:29 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-21 10:22:57 5 | 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter_go/components/widget_demo.dart'; 8 | import 'demo.dart'; 9 | 10 | const String content0 = ''' 11 | ### **简介** 12 | > 允许从一组选项中进行单一的选择 13 | - ChoiceChip包含相关的描述性文本或者类别 14 | 15 | '''; 16 | const String content1 = ''' 17 | ### **基本用法** 18 | - onSelected : 选择或者取消选择状态间切换调用 19 | '''; 20 | 21 | class Demo extends StatefulWidget { 22 | static const String routeName = '/components/Chip/ChoiceChip'; 23 | _DemoState createState() => _DemoState(); 24 | } 25 | 26 | class _DemoState extends State { 27 | @override 28 | Widget build(BuildContext context) { 29 | return WidgetDemo( 30 | contentList: [ 31 | content0, 32 | content1, 33 | ChoiceChipDemo(), 34 | ], 35 | codeUrl: 'components/Chip/ChoiceChip/demo.dart', 36 | docUrl: 37 | 'https://docs.flutter.io/flutter/material/ChoiceChip-class.html', 38 | title: 'ChoiceChip'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/widgets/components/Chip/FilterChip/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-20 10:19:55 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-21 10:25:22 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import 'demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 通过使用标签或者描述性词语来过滤内容 14 | - FilterChip 是 checkbox 或 switch widget 的替换品。 15 | 16 | '''; 17 | const String content1 = ''' 18 | ### **基本用法** 19 | '''; 20 | 21 | class Demo extends StatefulWidget { 22 | static const String routeName = '/components/Chip/FilterChip'; 23 | _DemoState createState() => _DemoState(); 24 | } 25 | 26 | class _DemoState extends State { 27 | @override 28 | Widget build(BuildContext context) { 29 | return WidgetDemo( 30 | contentList: [ 31 | content0, 32 | content1, 33 | FilterChipDemo(), 34 | ], 35 | codeUrl: 'components/Chip/FilterChip/demo.dart', 36 | docUrl: 37 | 'https://docs.flutter.io/flutter/material/FilterChip-class.html', 38 | title: 'FilterChip'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/widgets/components/Dialog/AboutDialog/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 07/01/2019 4 | /// Time: 10:26 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | import 'demo.dart'; 12 | 13 | const String _Text0 = """ 14 | ### **简介** 15 | > AboutDialog 通常用于传递企业或者app的官方信息 16 | - 这个对话框包含应用程序的图标,名称,版本号,版权和应用程序使用到的软件许可证的按钮 17 | 18 | 19 | ### **基本用法** 20 | > 要显示的AboutDialog,使用showAboutDialog。 21 | - 如果应用程序具有Drawer,则AboutListTile可以使显示AboutDialog的过程更简单。 22 | - AboutDialog通过showAboutDialog 显示按钮调用 showLicensePage。 23 | 24 | """; 25 | 26 | class Demo extends StatefulWidget { 27 | static const String routeName = '/components/Dialog/AboutDialog'; 28 | 29 | @override 30 | _DemoState createState() => _DemoState(); 31 | } 32 | 33 | class _DemoState extends State { 34 | @override 35 | Widget build(BuildContext context) { 36 | return WidgetDemo( 37 | title: 'AboutDialog', 38 | codeUrl: 'components/Dialog/AboutDialog/demo.dart', 39 | contentList: [_Text0, AboutDialogDemo()], 40 | docUrl: 'https://docs.flutter.io/flutter/material/AboutDialog-class.html', 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/widgets/components/Dialog/SimpleDialog/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 07/01/2019 4 | /// Time: 10:26 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | import 'demo.dart'; 12 | 13 | const String _Text0 = """ 14 | ### **简介** 15 | > SimpleDialog 是一个用于向用户传递确定信息并提供选项的弹出层 16 | - SimpleDialog 可为用户提供多个选项选择。有一个可选的标题,显示在选项上方 17 | 18 | 19 | 20 | ### **基本用法** 21 | 22 | > 通常作为子窗口小部件传递给showDialog,后者显示对话框。 23 | - 选择通常使用SimpleDialogOption表示 24 | - 对于通知用户情况的对话框,请考虑使用 AlertDialog。 25 | 26 | """; 27 | 28 | class Demo extends StatefulWidget { 29 | static const String routeName = '/components/Dialog/SimpleDialog'; 30 | 31 | @override 32 | _DemoState createState() => _DemoState(); 33 | } 34 | 35 | class _DemoState extends State { 36 | @override 37 | Widget build(BuildContext context) { 38 | return WidgetDemo( 39 | title: 'SimpleDialog', 40 | codeUrl: 'components/Dialog/SimpleDialog/demo.dart', 41 | contentList: [_Text0, SimpleDialogDemo()], 42 | docUrl: 43 | 'https://docs.flutter.io/flutter/material/SimpleDialog-class.html', 44 | ); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/widgets/components/Dialog/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../model/widget.dart'; 4 | import 'AlertDialog/index.dart' as AlertDialog; 5 | import 'Dialog/index.dart' as Dialog; 6 | import 'SimpleDialog/index.dart' as SimpleDialog; 7 | import 'AboutDialog/index.dart' as AboutDialog; 8 | 9 | List widgetPoints = [ 10 | WidgetPoint( 11 | name: 'AlertDialog', 12 | routerName: AlertDialog.Demo.routeName, 13 | buildRouter: (BuildContext context) => AlertDialog.Demo(), 14 | ), 15 | WidgetPoint( 16 | name: 'Dialog', 17 | routerName: Dialog.Demo.routeName, 18 | buildRouter: (BuildContext context) => Dialog.Demo(), 19 | ), 20 | WidgetPoint( 21 | name: 'SimpleDialog', 22 | routerName: SimpleDialog.Demo.routeName, 23 | buildRouter: (BuildContext context) => SimpleDialog.Demo(), 24 | ), 25 | WidgetPoint( 26 | name: 'AboutDialog', 27 | routerName: AboutDialog.Demo.routeName, 28 | buildRouter: (BuildContext context) => AboutDialog.Demo(), 29 | ), 30 | ]; 31 | -------------------------------------------------------------------------------- /lib/widgets/components/Grid/GridPaper/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 07/01/2019 4 | /// Time: 10:26 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | import 'demo.dart'; 12 | 13 | const String _Text0 = """ 14 | ### **简介** 15 | > GridViewPaper是GridView中的item的一种展现形式, 会在上层浮现一层网络. 16 | 17 | """; 18 | 19 | class Demo extends StatefulWidget { 20 | static const String routeName = '/components/Grid/GridPaper'; 21 | 22 | @override 23 | _DemoState createState() => _DemoState(); 24 | } 25 | 26 | class _DemoState extends State { 27 | @override 28 | Widget build(BuildContext context) { 29 | return WidgetDemo( 30 | title: 'GridPaper', 31 | codeUrl: 'components/Grid/GridPaper/demo.dart', 32 | contentList: [ 33 | _Text0, 34 | GridPaperDemo(), 35 | SizedBox( 36 | height: 100.0, 37 | ) 38 | ], 39 | docUrl: 'https://docs.flutter.io/flutter/material/GridPaper-class.html', 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/widgets/components/Grid/GridTile/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 07/01/2019 4 | /// Time: 10:26 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | import 'demo.dart'; 12 | 13 | const String _Text0 = """ 14 | ### **简介** 15 | > GridTile 是GridList中的一种瓷片组件;包含header, body, footer三部份; 16 | 17 | 18 | ### **基本用法** 19 | 20 | > 一个grid列表包含多个Item, 每个Item通常包含一些视觉丰富的内容(例如,图像), 我们可以用GridTileBar去定义他的页眉与页脚。 21 | 22 | 如下实例中, 第一个是item便是GridTile组件构成. 包含header, body, footer; 23 | """; 24 | 25 | class Demo extends StatefulWidget { 26 | static const String routeName = '/components/Grid/GridTile'; 27 | 28 | @override 29 | _DemoState createState() => _DemoState(); 30 | } 31 | 32 | class _DemoState extends State { 33 | @override 34 | Widget build(BuildContext context) { 35 | return WidgetDemo( 36 | title: 'GridTile', 37 | codeUrl: 'components/Grid/GridTile/demo.dart', 38 | contentList: [ 39 | _Text0, 40 | GridTileDemo(), 41 | ], 42 | docUrl: 'https://docs.flutter.io/flutter/material/Dialog-class.html', 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /lib/widgets/components/List/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 一晟 3 | /// Date: 2018/12/27 4 | /// Time: 下午2:50 5 | /// email: zhu.yan@alibaba-inc.com 6 | /// target: List 的示例 7 | 8 | import "package:flutter/material.dart"; 9 | 10 | import '../../../model/widget.dart'; 11 | import 'ListBody/index.dart' as ListBody; 12 | import 'ListView/index.dart' as ListView; 13 | import 'AnimatedList/index.dart' as AnimatedList; 14 | 15 | List widgetPoints = [ 16 | WidgetPoint( 17 | name: 'ListBody', 18 | routerName: ListBody.Demo.routeName, 19 | buildRouter: (BuildContext context) => ListBody.Demo(), 20 | ), 21 | WidgetPoint( 22 | name: 'ListView', 23 | routerName: ListView.Demo.routeName, 24 | buildRouter: (BuildContext context) => ListView.Demo(), 25 | ), 26 | WidgetPoint( 27 | name: 'AnimatedList', 28 | routerName: AnimatedList.Demo.routeName, 29 | buildRouter: (BuildContext context) => AnimatedList.Demo(), 30 | ) 31 | ]; 32 | -------------------------------------------------------------------------------- /lib/widgets/components/Menu/PopupMenuEntry/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-27 14:51:58 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-27 16:06:20 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import '../PopupMenuDivider/demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > Material 风格中 弹出菜单的一个基类 14 | - 如果需要创建一个显示弹出菜单的按钮,请考虑使用 PopupMenuButton. 15 | '''; 16 | 17 | const String content1 = ''' 18 | ### **基本用法** 19 | - PopupMenuDivider 是一条水平分割线,注意数组要使用父类 PopupMenuEntry,配合其他 item 样式共同使用 20 | '''; 21 | 22 | class Demo extends StatefulWidget { 23 | static const String routeName = '/components/Menu/PopupMenuEntry'; 24 | _DemoState createState() => _DemoState(); 25 | } 26 | 27 | class _DemoState extends State { 28 | @override 29 | Widget build(BuildContext context) { 30 | return WidgetDemo( 31 | contentList: [content0, content1, PopupMenuDividerDemo()], 32 | docUrl: 33 | 'https://docs.flutter.io/flutter/material/PopupMenuEntry-class.html', 34 | codeUrl: 'components/Menu/PopupMenuDivider/demo.dart', 35 | title: 'PopupMenuEntry', 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/widgets/components/Menu/PopupMenuItem/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-29 15:04:51 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-29 15:07:16 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import '../PopupMenuDivider/demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > Material 中窗口弹出的菜单 14 | - 如果需要创建一个显示弹出菜单的按钮,请考虑使用 PopupMenuButton. 15 | '''; 16 | 17 | const String content1 = ''' 18 | ### **基本用法** 19 | - PopupMenuDivider 是一条水平分割线,注意数组要使用父类 PopupMenuEntry,配合其他 item 样式共同使用 20 | '''; 21 | 22 | class Demo extends StatefulWidget { 23 | static const String routeName = '/components/Menu/PopupMenuItem'; 24 | _DemoState createState() => _DemoState(); 25 | } 26 | 27 | class _DemoState extends State { 28 | @override 29 | Widget build(BuildContext context) { 30 | return WidgetDemo( 31 | contentList: [content0, content1, PopupMenuDividerDemo()], 32 | docUrl: 33 | "https://docs.flutter.io/flutter/material/PopupMenuItem-class.html", 34 | codeUrl: 'components/Menu/PopupMenuDivider/demo.dart', 35 | title: 'PopupMenuItem', 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/widgets/components/Menu/PopupMenuItemState/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-29 15:04:51 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-29 16:22:06 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import '../PopupMenuDivider/demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 这个state 是 PopupMenuItem 子类 14 | - 默认情况下,它实现了Material Design弹出菜单项的基本样式和布局,然而这个buidlChild方法可以重写,以调整放置在菜单中的位置。默认它返回PopupMenuItem.child。 15 | 16 | '''; 17 | 18 | const String content1 = ''' 19 | ### **基本用法** 20 | - PopupMenuDivider 是一条水平分割线,注意数组要使用父类 PopupMenuEntry,配合其他 item 样式共同使用 21 | '''; 22 | 23 | class Demo extends StatefulWidget { 24 | static const String routeName = '/components/Menu/PopupMenuItem'; 25 | _DemoState createState() => _DemoState(); 26 | } 27 | 28 | class _DemoState extends State { 29 | @override 30 | Widget build(BuildContext context) { 31 | return WidgetDemo( 32 | contentList: [content0, content1, PopupMenuDividerDemo()], 33 | docUrl: 34 | "https://docs.flutter.io/flutter/material/PopupMenuItem-class.html", 35 | codeUrl: 'components/Menu/PopupMenuEntry/demo.dart', 36 | title: 'PopupMenuItem', 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/widgets/components/Navigation/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 一晟 3 | /// Date: 2018/12/27 4 | /// Time: 下午2:50 5 | /// email: zhu.yan@alibaba-inc.com 6 | /// target: Navigation 的示例 7 | 8 | import "package:flutter/material.dart"; 9 | 10 | import '../../../model/widget.dart'; 11 | import 'BottomNavigationBar/index.dart' as BottomNavigationBar; 12 | import 'BottomNavigationBarItem/index.dart' as BottomNavigationBarItem; 13 | 14 | List widgetPoints = [ 15 | WidgetPoint( 16 | name: 'BottomNavigationBar', 17 | routerName: BottomNavigationBar.Demo.routeName, 18 | buildRouter: (BuildContext context) => BottomNavigationBar.Demo(), 19 | ), 20 | WidgetPoint( 21 | name: 'BottomNavigationBarItem', 22 | routerName: BottomNavigationBarItem.Demo.routeName, 23 | buildRouter: (BuildContext context) => BottomNavigationBarItem.Demo(), 24 | ) 25 | ]; 26 | -------------------------------------------------------------------------------- /lib/widgets/components/Panel/ExpansionPanel/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-21 11:35:39 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-21 11:36:23 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import 'demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 扩展面板,包含一个标题和一个正文,可以展开或者折叠。面板展开,主体可见。 14 | 15 | 16 | '''; 17 | const String content1 = ''' 18 | ### **基本用法** 19 | 20 | '''; 21 | 22 | class Demo extends StatefulWidget { 23 | static const String routeName = '/components/Panel/ExpansionPanel'; 24 | _DemoState createState() => _DemoState(); 25 | } 26 | 27 | class _DemoState extends State { 28 | @override 29 | Widget build(BuildContext context) { 30 | return WidgetDemo( 31 | contentList: [ 32 | content0, 33 | content1, 34 | ExpansionPanelsDemo(), 35 | ], 36 | codeUrl: 'widgets/components/Panel/ExpansionPanel/demo.dart', 37 | docUrl: 'https://docs.flutter.io/flutter/material/RawChip-class.html', 38 | title: 'ExpansionPanel'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/widgets/components/Panel/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../model/widget.dart'; 4 | import 'ExpansionPanel/index.dart' as ExpansionPanel; 5 | import 'ExpansionPanelList/index.dart' as ExpansionPanelList; 6 | import 'ExpansionPanelRadio/index.dart' as ExpansionPanelRadio; 7 | 8 | List widgetPoints = [ 9 | WidgetPoint( 10 | name: 'ExpansionPanel', 11 | routerName: ExpansionPanel.Demo.routeName, 12 | buildRouter: (BuildContext context) => ExpansionPanel.Demo(), 13 | ), 14 | WidgetPoint( 15 | name: 'ExpansionPanelRadio', 16 | routerName: ExpansionPanelRadio.Demo.routeName, 17 | buildRouter: (BuildContext context) => ExpansionPanelRadio.Demo(), 18 | ), 19 | WidgetPoint( 20 | name: 'ExpansionPanelList', 21 | routerName: ExpansionPanelList.Demo.routeName, 22 | buildRouter: (BuildContext context) => ExpansionPanelList.Demo(), 23 | ), 24 | ]; 25 | -------------------------------------------------------------------------------- /lib/widgets/components/Pick/CityPIcker/demo.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 05/02/2019 4 | /// Time: 22:06 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:city_pickers/city_pickers.dart'; 10 | 11 | class CityPickerDemo extends StatefulWidget { 12 | _Demo createState() => _Demo(); 13 | } 14 | 15 | class _Demo extends State { 16 | String _result; 17 | show(context) async { 18 | Result temp = await CityPickers.showCityPicker( 19 | context: context, 20 | // locationCode: '640221', 21 | height: 400, 22 | ); 23 | setState(() { 24 | _result = "${temp.toString()}"; 25 | }); 26 | } 27 | 28 | Widget build(BuildContext context) { 29 | return Center( 30 | child: Column( 31 | children: [ 32 | Text("result: ${_result.toString()}"), 33 | RaisedButton( 34 | onPressed: () { 35 | this.show(context); 36 | }, 37 | child: Text("select"), 38 | ), 39 | ], 40 | )); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/widgets/components/Pick/CityPIcker/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 05/02/2019 4 | /// Time: 22:06 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | import 'demo.dart'; 12 | 13 | const String content0 = ''' 14 | ### **简介** 15 | > 显示中国的省市县地区 16 | 通过函数 **showCityPicker** 调用, 在容器窗口上弹出遮罩层 17 | '''; 18 | const String content1 = ''' 19 | ### **基本用法** 20 | - locationCode 初始化地区选择 21 | - height 弹出层高度 22 | - context 上下文对象 23 | '''; 24 | 25 | class Demo extends StatefulWidget { 26 | static const String routeName = '/components/Pick/CityPicker'; 27 | _Demo createState() => _Demo(); 28 | } 29 | 30 | class _Demo extends State { 31 | Widget build(BuildContext context) { 32 | return WidgetDemo( 33 | title: 'CityPicker', 34 | codeUrl: '', 35 | docUrl: '', 36 | contentList: [content0, content1, CityPickerDemo()], 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/widgets/components/Pick/DayPicker/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-17 15:37:16 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-17 15:50:02 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import 'demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 显示给定月份的日期,并可以选择一天 14 | - 该选择器widget很少使用,相反,请考虑使用showDatePicker,它会创建一个日期选择器对话框 15 | '''; 16 | const String content1 = ''' 17 | ### **基本用法** 18 | - currentDate,设置显示器当前显示时间 19 | - displayedMonth ,设置选择器显示天数的月份 20 | - firstDate,设置选择的最早日期 21 | - lastDate,设置可选择的最晚日期 22 | - selectedDate,设置当前选择的日期 23 | '''; 24 | 25 | class Demo extends StatefulWidget { 26 | static const String routeName = '/components/Pick/DayPicker'; 27 | 28 | _DemoState createState() => _DemoState(); 29 | } 30 | 31 | class _DemoState extends State { 32 | @override 33 | Widget build(BuildContext context) { 34 | return WidgetDemo( 35 | contentList: [content0, content1, DayPickerDemo()], 36 | codeUrl: 'components/Pick/DayPicker/demo.dart', 37 | docUrl: "https://docs.flutter.io/flutter/material/DayPicker-class.html", 38 | title: 'DayPicker'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/widgets/components/Pick/MonthPicker/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-17 15:37:16 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-17 17:06:34 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import 'demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 运行选择一个月的可滚动月份列表 14 | - 年份选择器widget很少使用,相反,请考虑使用showDatePicker,它会创建一个日期选择器对话框 15 | '''; 16 | const String content1 = ''' 17 | ### **基本用法** 18 | - firstData,设置用户选择的最早日期 19 | - lastData,设置用户可选择的最晚日期 20 | - selectedDate,设置当前选择的日期 21 | - onchanged,当用户选择一个月的时候调用 22 | '''; 23 | 24 | class Demo extends StatefulWidget { 25 | static const String routeName = '/components/Pick/MonthPicker'; 26 | 27 | _DemoState createState() => _DemoState(); 28 | } 29 | 30 | class _DemoState extends State { 31 | @override 32 | Widget build(BuildContext context) { 33 | return WidgetDemo( 34 | contentList: [content0, content1, MothPickerDemo()], 35 | codeUrl: 'components/Pick/MonthPicker/demo.dart', 36 | docUrl: 37 | "https://docs.flutter.io/flutter/material/MonthPicker-class.html", 38 | title: 'MonthPicker'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/widgets/components/Pick/ShowdatePicker/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-17 15:37:16 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-17 16:00:07 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import 'demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 日期选择器的对话框 14 | - 返回为Futer,为用户关闭对话框时用户选择的日期。如果用户取消该对话框,则返回为null 15 | '''; 16 | const String content1 = ''' 17 | ### **基本用法** 18 | - selectableDayPredicate可以传入自定义选择的天数。 19 | - 可选initialDatePickerMode参数可用于最初在年或月+日选择器模式中显示日期选择器。默认为月+日,且不能为空。 20 | - 可选locale参数可用于设置日期选择器的区域设置 21 | '''; 22 | 23 | class Demo extends StatefulWidget { 24 | static const String routeName = '/components/Pick/ShowdatePicker'; 25 | 26 | _DemoState createState() => _DemoState(); 27 | } 28 | 29 | class _DemoState extends State { 30 | @override 31 | Widget build(BuildContext context) { 32 | return WidgetDemo( 33 | contentList: [content0, content1, ShowDatePickerDemo()], 34 | codeUrl: 'components/Pick/ShowdatePicker/demo.dart', 35 | docUrl: 'https://docs.flutter.io/flutter/material/showDatePicker.html', 36 | title: 'ShowDatePicker'); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/widgets/components/Pick/YearPicker/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-17 15:37:16 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-17 16:00:07 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import 'demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 运行选择一年的可滚动年份列表 14 | - 年份选择器widget很少使用,相反,请考虑使用showDatePicker,它会创建一个日期选择器对话框 15 | '''; 16 | const String content1 = ''' 17 | ### **基本用法** 18 | - 使用firstData,设置用户选择的最早日期 19 | - 使用lastData,设置用户可选择的最晚日期 20 | - 使用selectedDate,设置当前选择的日期 21 | '''; 22 | 23 | class Demo extends StatefulWidget { 24 | static const String routeName = '/components/Pick/YearPicker'; 25 | 26 | _DemoState createState() => _DemoState(); 27 | } 28 | 29 | class _DemoState extends State { 30 | @override 31 | Widget build(BuildContext context) { 32 | return WidgetDemo( 33 | contentList: [content0, content1, YearPickerDemo()], 34 | codeUrl: 'components/Pick/YearPicker/demo.dart', 35 | docUrl: 36 | 'https://docs.flutter.io/flutter/material/YearPicker-class.html', 37 | title: 'YearPicker'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/widgets/components/Pick/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../model/widget.dart'; 4 | import 'YearPicker/index.dart' as YearPicker; 5 | import 'DayPicker/index.dart' as DayPicker; 6 | import 'MonthPicker/index.dart' as MonthPicker; 7 | import 'ShowdatePicker/index.dart' as ShowdatePicker; 8 | import 'CityPIcker/index.dart' as CityPicker; 9 | 10 | List widgetPoints = [ 11 | WidgetPoint( 12 | name: 'YearPicker', 13 | routerName: YearPicker.Demo.routeName, 14 | buildRouter: (BuildContext context) => YearPicker.Demo(), 15 | ), 16 | WidgetPoint( 17 | name: 'MonthPicker', 18 | routerName: MonthPicker.Demo.routeName, 19 | buildRouter: (BuildContext context) => MonthPicker.Demo(), 20 | ), 21 | WidgetPoint( 22 | name: 'DayPicker', 23 | routerName: DayPicker.Demo.routeName, 24 | buildRouter: (BuildContext context) => DayPicker.Demo(), 25 | ), 26 | WidgetPoint( 27 | name: 'ShowdatePicker', 28 | routerName: ShowdatePicker.Demo.routeName, 29 | buildRouter: (BuildContext context) => ShowdatePicker.Demo(), 30 | ), 31 | WidgetPoint( 32 | name: 'CityPicker', 33 | routerName: CityPicker.Demo.routeName, 34 | buildRouter: (BuildContext context) => CityPicker.Demo(), 35 | ), 36 | ]; 37 | -------------------------------------------------------------------------------- /lib/widgets/components/Progress/CircularProgressIndicator/demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CircularDemo extends StatefulWidget { 4 | @override 5 | _CircularDemoState createState() => _CircularDemoState(); 6 | } 7 | 8 | class _CircularDemoState extends State { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Row( 12 | mainAxisAlignment: MainAxisAlignment.spaceAround, 13 | children: [ 14 | SizedBox( 15 | height: 20, 16 | width: 20, 17 | child: CircularProgressIndicator( 18 | backgroundColor: Colors.red, 19 | ), 20 | ), 21 | SizedBox( 22 | height: 30, 23 | width: 30, 24 | child: CircularProgressIndicator( 25 | backgroundColor: Colors.red, 26 | ), 27 | ), 28 | CircularProgressIndicator( 29 | backgroundColor: Colors.redAccent, 30 | ), 31 | SizedBox( 32 | height: 50, 33 | width: 50, 34 | child: CircularProgressIndicator( 35 | backgroundColor: Colors.red, 36 | ), 37 | ), 38 | ], 39 | ); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/widgets/components/Progress/LinearProgressIndicator/demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class LinearProgressIndicatorDemo extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Container( 7 | width: 200.0, 8 | child: LinearProgressIndicator(), 9 | ); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/widgets/components/Progress/RefreshProgressIndicator/demo.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/widgets/components/Progress/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../model/widget.dart'; 4 | import 'LinearProgressIndicator/index.dart' as LinearProgressIndicator; 5 | import 'CircularProgressIndicator/index.dart' as CircularProgressIndicator; 6 | 7 | List widgetPoints = [ 8 | WidgetPoint( 9 | name: 'LinearProgressIndicator', 10 | routerName: LinearProgressIndicator.Demo.routeName, 11 | buildRouter: (BuildContext context) => LinearProgressIndicator.Demo(), 12 | ), 13 | WidgetPoint( 14 | name: 'CircularProgressIndicator', 15 | routerName: CircularProgressIndicator.Demo.routeName, 16 | buildRouter: (BuildContext context) => CircularProgressIndicator.Demo(), 17 | ), 18 | ]; 19 | -------------------------------------------------------------------------------- /lib/widgets/components/Scaffold/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 07/01/2019 4 | /// Time: 14:53 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import "package:flutter/material.dart"; 9 | 10 | import '../../../model/widget.dart'; 11 | import 'Scaffold/index.dart' as Scaffold; 12 | import 'ScaffoldState/index.dart' as ScaffoldState; 13 | 14 | List widgetPoints = [ 15 | WidgetPoint( 16 | name: 'Scaffold', 17 | routerName: Scaffold.Demo.routeName, 18 | buildRouter: (BuildContext context) => Scaffold.Demo(), 19 | ), 20 | WidgetPoint( 21 | name: 'ScaffoldState', 22 | routerName: ScaffoldState.Demo.routeName, 23 | buildRouter: (BuildContext context) => ScaffoldState.Demo(), 24 | ), 25 | ]; 26 | -------------------------------------------------------------------------------- /lib/widgets/components/Scroll/Scrollable/demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-10 21:32:07 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-15 16:26:20 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | class ScrollableDemo extends StatefulWidget { 9 | _ScrollableDemoState createState() => _ScrollableDemoState(); 10 | } 11 | 12 | class _ScrollableDemoState extends State { 13 | @override 14 | Widget build(BuildContext context) { 15 | return Container( 16 | child: Container( 17 | height: 100.0, 18 | child: Text('暂无Demo'), 19 | ), 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/widgets/components/Tab/Tab/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-22 20:37:58 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-22 20:49:56 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import './demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 属于 Material 风格下的一个widget 14 | - 如果同时给Tab传入icon和text,text将会被展现在icon的下面 15 | '''; 16 | 17 | const String content1 = ''' 18 | ### **基本用法** 19 | > 通常需要配合TabBar TabBarView使用 20 | - TabBar中的children和TabBarView中的数组成一一对应关系 21 | - TabController 可以协调TabBarView和Tab之间的选择和个数等 22 | '''; 23 | 24 | class Demo extends StatefulWidget { 25 | static const String routeName = '/components/Tab/Tab'; 26 | _DemoState createState() => _DemoState(); 27 | } 28 | 29 | class _DemoState extends State { 30 | @override 31 | Widget build(BuildContext context) { 32 | return WidgetDemo( 33 | codeUrl: 'components/Tab/Tab/demo.dart', 34 | docUrl: 'https://docs.flutter.io/flutter/material/Tab-class.html', 35 | title: 'Tab', 36 | contentList: [ 37 | content0, 38 | content1, 39 | TabDemo(), 40 | ], 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/widgets/components/Tab/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-22 20:37:45 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-22 20:43:15 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import '../../../model/widget.dart'; 9 | import './Tab/index.dart' as Tab; 10 | 11 | List widgetPoints = [ 12 | WidgetPoint( 13 | name: 'Tab', 14 | routerName: Tab.Demo.routeName, 15 | buildRouter: (BuildContext context) => Tab.Demo(), 16 | ), 17 | ]; 18 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/CheckBox/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../../model/widget.dart'; 4 | import 'Checkbox/index.dart' as Checkbox; 5 | import 'CheckboxListTile/index.dart' as CheckboxListTile; 6 | 7 | List widgetPoints = [ 8 | WidgetPoint( 9 | name: 'Checkbox', 10 | routerName: Checkbox.Demo.routeName, 11 | buildRouter: (BuildContext context) => Checkbox.Demo(), 12 | ), 13 | WidgetPoint( 14 | name: 'CheckboxListTile', 15 | routerName: CheckboxListTile.Demo.routeName, 16 | buildRouter: (BuildContext context) => CheckboxListTile.Demo(), 17 | ) 18 | ]; 19 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Input/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with FlutterGo. 2 | /// User: 一晟 3 | /// Date: 2018/11/14 4 | /// Time: 下午4:31 5 | /// email: zhu.yan@alibaba-inc.com 6 | /// target: Input 的示例 7 | /// 对应文档地址:https://docs.flutter.io/flutter/material/RaisedButton-class.html 8 | 9 | import "package:flutter/material.dart"; 10 | 11 | import '../../../../model/widget.dart'; 12 | import './TextField/index.dart' as TextField; 13 | 14 | List widgetPoints = [ 15 | WidgetPoint( 16 | name: 'TextField', 17 | routerName: TextField.Demo.routeName, 18 | buildRouter: (BuildContext context) => TextField.Demo(), 19 | ), 20 | ]; 21 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Radio/RadioListTile/demo.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 20/12/2018 4 | /// Time: 14:32 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | class DemoA extends StatefulWidget { 11 | _Demo createState() => _Demo(); 12 | } 13 | 14 | class _Demo extends State { 15 | String value = ''; 16 | 17 | onChange(v) { 18 | this.setState(() { 19 | value = v; 20 | }); 21 | } 22 | 23 | Widget build(BuildContext context) { 24 | return Column( 25 | children: [ 26 | RadioListTile( 27 | title: const Text('A'), 28 | value: "A", 29 | groupValue: this.value, 30 | isThreeLine: false, 31 | subtitle: const Text("subtitleA"), 32 | onChanged: onChange), 33 | RadioListTile( 34 | title: const Text('B'), 35 | value: "B", 36 | subtitle: const Text("subtitleB"), 37 | groupValue: this.value, 38 | onChanged: onChange), 39 | ], 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Radio/RadioListTile/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 22/11/2018 4 | /// Time: 19:17 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: Radio相关 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | import 'demo.dart'; 12 | 13 | const content1 = """ 14 | ### **简介** 15 | > material design 风格的单选按钮附加文字label 16 | 17 | 点击文字的同时 , 将会触发Radio的点击效果. 18 | 19 | 功能同 @Radio 20 | 21 | ### **基本用法** 22 | Radio是单选框,和checkbox一样本身不包含状态,当groupValue = value时代表选中状态 23 | """; 24 | 25 | class Demo extends StatefulWidget { 26 | static const String routeName = '/element/Form/RadioListTile/index'; 27 | _DemoState createState() => _DemoState(); 28 | } 29 | 30 | class _DemoState extends State { 31 | @override 32 | Widget build(BuildContext context) { 33 | return WidgetDemo( 34 | contentList: [content1, new DemoA()], 35 | title: 'RadioListTile', 36 | docUrl: 37 | 'https://docs.flutter.io/flutter/material/RadioListTile-class.html', 38 | codeUrl: 'elements/Form/Radio/RadioListTile/demo.dart', 39 | ); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Radio/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../../model/widget.dart'; 4 | import 'Radio/index.dart' as Radio; 5 | import 'RadioListTile/index.dart' as RadioTile; 6 | 7 | List widgetPoints = [ 8 | WidgetPoint( 9 | name: 'Radio', 10 | routerName: Radio.Demo.routeName, 11 | buildRouter: (BuildContext context) => Radio.Demo(), 12 | ), 13 | WidgetPoint( 14 | name: 'RadioListTile', 15 | routerName: RadioTile.Demo.routeName, 16 | buildRouter: (BuildContext context) => RadioTile.Demo(), 17 | ), 18 | ]; 19 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Slider/SliderThemeData/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 20/12/2018 4 | /// Time: 17:43 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter/cupertino.dart'; 10 | 11 | import 'package:flutter_go/components/widget_demo.dart'; 12 | import 'demo.dart'; 13 | 14 | const contentA = ''' 15 | ### **简介** 16 | > SliderTheme的data修饰属性 **SliderThemeData** 17 | 18 | 19 | 20 | ### **基本用法** 21 | 22 | > 配合SliderTheme, 修改slider组件各个部件的样式, 参照@Slider的各组件命名, 修改各部件样式 23 | 24 | 25 | 26 | '''; 27 | 28 | class Demo extends StatefulWidget { 29 | static const String routeName = 'elements/Form/Slider/SliderThemeData'; 30 | _Demo createState() => _Demo(); 31 | } 32 | 33 | class _Demo extends State { 34 | Color c = CupertinoColors.activeBlue; 35 | @override 36 | Widget build(BuildContext context) { 37 | return WidgetDemo( 38 | title: 'SliderThemeData', 39 | codeUrl: 'elements/Form/Slider/SliderThemeData/demo.dart', 40 | contentList: [contentA, SliderThemeDemo()], 41 | docUrl: 42 | 'https://docs.flutter.io/flutter/material/SliderThemeData-class.html', 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Slider/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../../model/widget.dart'; 4 | import "Slider/index.dart" as Slider; 5 | import "SliderTheme/index.dart" as SliderTheme; 6 | import "SliderThemeData/index.dart" as SliderThemeData; 7 | 8 | List widgetPoints = [ 9 | WidgetPoint( 10 | name: 'Slider', 11 | routerName: Slider.Demo.routeName, 12 | buildRouter: (BuildContext context) => Slider.Demo(), 13 | ), 14 | WidgetPoint( 15 | name: 'SliderTheme', 16 | routerName: SliderTheme.Demo.routeName, 17 | buildRouter: (BuildContext context) => SliderTheme.Demo(), 18 | ), 19 | WidgetPoint( 20 | name: 'SliderThemeData', 21 | routerName: SliderThemeData.Demo.routeName, 22 | buildRouter: (BuildContext context) => SliderThemeData.Demo(), 23 | ) 24 | ]; 25 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Switch/AnimatedSwitcher/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 28/12/2018 4 | /// Time: 19:54 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | 12 | import 'demo.dart'; 13 | 14 | const contentA = ''' 15 | ### **简介** 16 | > 一个在新旧组件. 做渐变切换的组件. 有一定的动画效果 17 | 18 | *注意*: 19 | - 如果你切换的足够快.超过了间隔时间, 组件只会隐藏第一个 .并渐渐显示最后一个生效的组件. 20 | - 如果你变更的组件.只是同一个组件, 不同的state或者不同的显示数据与状态. 请为当前组件每一个状态加入一个Key. 强制生效动画效果. 21 | 22 | 23 | 24 | ### **基本实例** 25 | 26 | '''; 27 | 28 | class Demo extends StatefulWidget { 29 | static const String routeName = 'elements/Form/Switch/AnimatedSwitcher'; 30 | 31 | _Demo createState() => _Demo(); 32 | } 33 | 34 | class _Demo extends State { 35 | Widget build(BuildContext context) { 36 | return WidgetDemo( 37 | title: 'AnimatedSwitcher', 38 | codeUrl: 'elements/Form/Switch/AnimatedSwitcher/demo.dart', 39 | contentList: [contentA, AnimatedSwitcherDemo()], 40 | docUrl: '', 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Switch/SwitchListTile/demo.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 28/12/2018 4 | /// Time: 15:48 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | class SwitchListTileDemo extends StatefulWidget { 11 | _Demo createState() => _Demo(); 12 | } 13 | 14 | class _Demo extends State { 15 | bool _lights = false; 16 | @override 17 | Widget build(BuildContext context) { 18 | return SwitchListTile( 19 | title: const Text('Lights'), 20 | value: _lights, 21 | onChanged: (bool value) { 22 | setState(() { 23 | _lights = value; 24 | }); 25 | }, 26 | secondary: const Icon(Icons.lightbulb_outline), 27 | ); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Switch/SwitchListTile/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 28/12/2018 4 | /// Time: 15:48 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | import 'package:flutter/material.dart'; 8 | 9 | import 'package:flutter_go/components/widget_demo.dart'; 10 | import 'demo.dart'; 11 | 12 | const contentA = ''' 13 | ### **简介** 14 | > Switch 的一个衍生组件 15 | 16 | 基本用法与Switch相同.具体参考@Switch, 支持各种自定义样式. 17 | 18 | 19 | 20 | ### **基本实例** 21 | 22 | '''; 23 | 24 | class Demo extends StatefulWidget { 25 | static const String routeName = 'elements/Form/Switch/SwitchListTile'; 26 | _Demo createState() => _Demo(); 27 | } 28 | 29 | class _Demo extends State { 30 | @override 31 | Widget build(BuildContext context) { 32 | return WidgetDemo( 33 | title: 'SwitchListTile', 34 | codeUrl: 'elements/Form/Switch/SwitchListTile/demo.dart', 35 | contentList: [contentA, SwitchListTileDemo()], 36 | docUrl: '', 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Switch/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../../model/widget.dart'; 4 | import "Switch/index.dart" as Switch; 5 | import "SwitchListTile/index.dart" as SwitchListTile; 6 | import "AnimatedSwitcher/index.dart" as AnimatedSwitcher; 7 | 8 | List widgetPoints = [ 9 | WidgetPoint( 10 | name: 'Switch', 11 | routerName: Switch.Demo.routeName, 12 | buildRouter: (BuildContext context) => Switch.Demo(), 13 | ), 14 | WidgetPoint( 15 | name: 'SwitchListTile', 16 | routerName: SwitchListTile.Demo.routeName, 17 | buildRouter: (BuildContext context) => SwitchListTile.Demo(), 18 | ), 19 | WidgetPoint( 20 | name: 'AnimatedSwitcher', 21 | routerName: AnimatedSwitcher.Demo.routeName, 22 | buildRouter: (BuildContext context) => AnimatedSwitcher.Demo(), 23 | ) 24 | ]; 25 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Text/RichText/demo.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 14/01/2019 4 | /// Time: 19:02 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | class RichTextDemo extends StatefulWidget { 11 | _Demo createState() => _Demo(); 12 | } 13 | 14 | class _Demo extends State { 15 | @override 16 | Widget build(BuildContext context) { 17 | return Container( 18 | color: Color(0xff000000), 19 | width: 750.0, 20 | child: RichText( 21 | text: TextSpan( 22 | text: 'Hello ', 23 | children: [ 24 | TextSpan( 25 | text: 'bold', 26 | style: TextStyle( 27 | fontWeight: FontWeight.bold, color: Color(0xfffffc42))), 28 | TextSpan( 29 | text: ' world!', style: TextStyle(fontStyle: FontStyle.italic)), 30 | ], 31 | ), 32 | ), 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Text/RichText/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import 'package:flutter_go/widgets/elements/Form/Text/RichText/demo.dart'; 5 | 6 | const String intro = """ 7 | ### **简介** 8 | 9 | > 具有复杂样式的文本显示组件 10 | 11 | 在富文本使用多个不同风格的widget显示文本。要显示的文本使用TextSpan对象树来描述,每个对象都有一个用于该子树的关联样式。文本可能会跨越多行,也可能全部显示在同一行上,具体取决于布局约束。 12 | 13 | 无论是Text或者Text.rich, 查看源代码发现. 都是由RichText构建出来 14 | 15 | 16 | ### **基本用法** 17 | 我们可以让一段文本通过使用不同的TextSpan显示不同的样式。比如我们让"Hello beautiful world"的每个单词都显示不同的样式. 18 | 19 | """; 20 | 21 | class Demo extends StatefulWidget { 22 | static const String routeName = '/element/Form/Text/RichText'; 23 | _Demo createState() => _Demo(); 24 | } 25 | 26 | class _Demo extends State { 27 | @override 28 | Widget build(BuildContext context) { 29 | return WidgetDemo( 30 | title: 'Rich Text', 31 | docUrl: 'https://docs.flutter.io/flutter/widgets/RichText-class.html', 32 | codeUrl: 'elements/Form/Text/RichText/demo.dart', 33 | contentList: [ 34 | intro, 35 | RichTextDemo(), 36 | ]); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Text/Text/demo.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 20/01/2019 4 | /// Time: 22:28 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: CupertinoTabBar 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter/cupertino.dart'; 10 | 11 | class TextDemo extends StatefulWidget { 12 | _Demo createState() => _Demo(); 13 | } 14 | 15 | class _Demo extends State { 16 | int index = 0; 17 | Duration timer = new Duration(minutes: 50); 18 | @override 19 | Widget build(BuildContext context) { 20 | return Text("i'm a text"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Text/Text/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import 'demo.dart'; 5 | 6 | const String intro = """ 7 | ### **简介** 8 | 9 | > 具有某个单一样式的文本显示的widget组件, 显示支持一行或者多行. 默认样式会继承层级最为接近的 *DefaultStyle* 10 | 当然, 你也可以重新他的样式 将 *DefaultStyle.inherit 设置为 false* 11 | 12 | 是最基本的文本显示组件 13 | 14 | ### **基本用法** 15 | 在这里介绍一下他的基本属性说明. 16 | 17 | - data Text显示的文本,必填参数 String 18 | - textAlign 文本的对齐方式,可以选择左对齐、右对齐还是居中对齐 TextAlign 19 | - maxLines 文本显示的最大行数 int 20 | - overflow 文本显示的截断方式 TextOverflow 21 | - textScaleFactor 文本的缩放比例 double 22 | - style 用于指定文本显示的样式如颜色、字体、粗细、背景等 23 | 24 | 25 | ### **基本示例** 26 | 27 | """; 28 | 29 | class Demo extends StatefulWidget { 30 | static const String routeName = '/element/Form/Text/Text'; 31 | _Demo createState() => _Demo(); 32 | } 33 | 34 | class _Demo extends State { 35 | onButtonTap() {} 36 | @override 37 | Widget build(BuildContext context) { 38 | return WidgetDemo( 39 | title: "Text", 40 | docUrl: 'flutter/widgets/Text-class.html', 41 | codeUrl: 'elements/Form/Text/Text/demo.dart', 42 | contentList: [ 43 | intro, 44 | TextDemo(), 45 | ]); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/Text/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../../model/widget.dart'; 4 | import 'RichText/index.dart' as RichText; 5 | import 'Text/index.dart' as Text; 6 | 7 | List widgetPoints = [ 8 | WidgetPoint( 9 | name: 'RichText', 10 | routerName: RichText.Demo.routeName, 11 | buildRouter: (BuildContext context) => RichText.Demo(), 12 | ), 13 | WidgetPoint( 14 | name: 'Text', 15 | routerName: Text.Demo.routeName, 16 | buildRouter: (BuildContext context) => Text.Demo(), 17 | ), 18 | ]; 19 | -------------------------------------------------------------------------------- /lib/widgets/elements/Form/index.dart: -------------------------------------------------------------------------------- 1 | import 'Button/index.dart' as Button; 2 | import 'Text/index.dart' as Text; 3 | import 'Input/index.dart' as Input; 4 | import 'CheckBox/index.dart' as CheckBox; 5 | import 'Radio/index.dart' as Radio; 6 | import 'Slider/index.dart' as Slider; 7 | import 'Switch/index.dart' as Switch; 8 | 9 | List getWidgets() { 10 | List result = []; 11 | result.addAll(Button.widgetPoints); 12 | result.addAll(Text.widgetPoints); 13 | result.addAll(Input.widgetPoints); 14 | result.addAll(CheckBox.widgetPoints); 15 | result.addAll(Radio.widgetPoints); 16 | result.addAll(Slider.widgetPoints); 17 | result.addAll(Switch.widgetPoints); 18 | return result; 19 | } 20 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Align/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/model/widget.dart'; 4 | import './Align/index.dart' as Align; 5 | 6 | List widgetPoints = [ 7 | WidgetPoint( 8 | name: 'Align', 9 | routerName: Align.Demo.routeName, 10 | buildRouter: (BuildContext context) => Align.Demo(), 11 | ), 12 | ]; 13 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Box/RotatedBox/demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class RotatedDemo extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Column( 7 | children: [ 8 | RotatedBox( 9 | child: const Text('hello flutter'), 10 | quarterTurns: 3, 11 | ), 12 | SizedBox( 13 | height: 20.0, 14 | ), 15 | RotatedBox( 16 | child: const Text('hello flutter'), 17 | quarterTurns: 8, 18 | ) 19 | ], 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Box/SizeBox/demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/widgets.dart'; 3 | 4 | class SizeBoxDefault extends StatelessWidget { 5 | @override 6 | Widget build(BuildContext context) { 7 | return SizedBox( 8 | width: 140.0, 9 | height: 80.0, 10 | child: const Card( 11 | child: Text( 12 | 'SizedBox', 13 | textDirection: TextDirection.rtl, 14 | ), 15 | margin: EdgeInsets.all(20.0), 16 | color: Color(0xFFEF9A9A), 17 | ), 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Box/UnconstrainedBox/demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class UnconstrainedBoxDemo extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return UnconstrainedBox( 7 | constrainedAxis: Axis.vertical, 8 | textDirection: TextDirection.rtl, 9 | child: Row( 10 | children: [ 11 | Container( 12 | width: 100.0, 13 | height: 100.0, 14 | color: Color(0xfff48fb1), 15 | child: Text( 16 | "data", 17 | style: TextStyle(color: Colors.white), 18 | ), 19 | ), 20 | ], 21 | ), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Expanded/Expanded/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import './expanded_demo.dart'; 5 | 6 | const contentText0 = ''' 7 | ### **简介** 8 | > 一个用于撑开 flex 布局子组件空间的widget 9 | - 用于在Row、Column、Flex子组件内 10 | - 会沾满所有可用空间 11 | '''; 12 | 13 | const contentText1 = ''' 14 | ### **基本用法** 15 | > 以下示例对比使用 ```Expanded``` 16 | - 使用Expanded 可以使 Row、Column或者Flex的子项能够填充主轴的全部可用空间 17 | - 如果存在多个子项,则根据 flex 属性来划分可用空间 18 | - Expanded widget 必须是Row,Column或者Flex的后代 19 | '''; 20 | 21 | class Demo extends StatefulWidget { 22 | static const String routeName = '/element/Frame/Expanded/Expanded'; 23 | _DemoState createState() => _DemoState(); 24 | } 25 | 26 | class _DemoState extends State { 27 | @override 28 | Widget build(BuildContext context) { 29 | return WidgetDemo( 30 | title: 'Expanded', 31 | codeUrl: 'elements/Frame/Expanded/Expanded/expanded_demo.dart', 32 | docUrl: 'https://docs.flutter.io/flutter/widgets/Expanded-class.html', 33 | contentList: [ 34 | contentText0, 35 | contentText1, 36 | ExpandedDemo(), 37 | ], 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Expanded/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/model/widget.dart'; 4 | 5 | import './Expanded/index.dart' as Expanded; 6 | 7 | List widgetPoints = [ 8 | WidgetPoint( 9 | name: 'Expanded', 10 | routerName: Expanded.Demo.routeName, 11 | buildRouter: (BuildContext context) => Expanded.Demo(), 12 | ), 13 | ]; 14 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Layout/Center/demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CenterDemo extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Center( 7 | widthFactor: 2.0, 8 | heightFactor: 2.0, 9 | child: Container( 10 | color: Color(0xfff48fb1), 11 | width: 90.0, 12 | height: 50.0, 13 | ), 14 | ); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Layout/index.dart: -------------------------------------------------------------------------------- 1 | import "package:flutter/material.dart"; 2 | 3 | import '../../../../model/widget.dart'; 4 | import 'Row/index.dart' as Row; 5 | import 'Column/index.dart' as Column; 6 | import 'Container/index.dart' as Container; 7 | import 'Center/index.dart' as Center; 8 | 9 | List widgetPoints = [ 10 | WidgetPoint( 11 | name: 'Row', 12 | routerName: Row.Demo.routeName, 13 | buildRouter: (BuildContext context) => Row.Demo(), 14 | ), 15 | WidgetPoint( 16 | name: 'Column', 17 | routerName: Column.Demo.routeName, 18 | buildRouter: (BuildContext context) => Column.Demo(), 19 | ), 20 | WidgetPoint( 21 | name: 'Container', 22 | routerName: Container.Demo.routeName, 23 | buildRouter: (BuildContext context) => Container.Demo(), 24 | ), 25 | WidgetPoint( 26 | name: 'Center', 27 | routerName: Center.Demo.routeName, 28 | buildRouter: (BuildContext context) => Center.Demo(), 29 | ), 30 | ]; 31 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Spacing/AnimatedPadding/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-11-28 20:44:13 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2019-01-14 17:02:20 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import './animatedPadding_demo.dart'; 10 | 11 | const contentDesc0 = ''' 12 | ### **简介** 13 | > 属于Flutter动画成员的一部分 14 | '''; 15 | 16 | const contentDesc1 = ''' 17 | ### **基本用法** 18 | > 动画版本的Padding 19 | - 在给定的时间内,自动完成转换缩进到给定的padding值 20 | - 通过设置curve 来指定动画的运行速率动画 21 | '''; 22 | 23 | class Demo extends StatefulWidget { 24 | static const String routeName = '/element/Frame/spacing/AnimatedPadding'; 25 | _DemoState createState() => _DemoState(); 26 | } 27 | 28 | class _DemoState extends State { 29 | @override 30 | Widget build(BuildContext context) { 31 | return WidgetDemo( 32 | title: 'AnimatedPadding', 33 | contentList: [ 34 | contentDesc0, 35 | contentDesc1, 36 | AnimatedPaddingDemo(), 37 | ], 38 | docUrl: 39 | 'https://docs.flutter.io/flutter/widgets/AnimatedPadding-class.html', 40 | codeUrl: 41 | 'elements/Frame/Spacing/AnimatedPadding/animatedPadding_demo.dart', 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Spacing/Padding/index.dart: -------------------------------------------------------------------------------- 1 | /// Author: 一凨 2 | /// Date: 2018-11-28 20:25:24 3 | /// Last Modified by: 一凨 4 | /// Last Modified time: 2019-01-14 17:01:55 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import './padding_demo.dart'; 10 | 11 | const contentDesc0 = ''' 12 | ### **简介** 13 | > widget 内边距 14 | - 类似于前端中的 div+css:padding 效果 15 | - Container + padding = Padding 16 | '''; 17 | 18 | const contentDesc1 = ''' 19 | ### **基本用法** 20 | > Padding widget 的padding必须设置,不能为null 21 | - 通过给定的padding值来隔开子组件 22 | - 通过EdgeInsets 类来计算 padding的大小 23 | '''; 24 | 25 | class Demo extends StatefulWidget { 26 | static const String routeName = '/element/Frame/spacing/Padding'; 27 | _DemoState createState() => _DemoState(); 28 | } 29 | 30 | class _DemoState extends State { 31 | @override 32 | Widget build(BuildContext context) { 33 | return WidgetDemo( 34 | title: 'Padding', 35 | contentList: [contentDesc0, contentDesc1, PaddingDemo()], 36 | docUrl: 'https://docs.flutter.io/flutter/widgets/Padding-class.html', 37 | codeUrl: 'elements/Frame/Spacing/Padding/padding_demo.dart', 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Spacing/Padding/padding_demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-11-28 20:20:04 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2019-01-14 16:30:16 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | class PaddingDemo extends StatelessWidget { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | color: Colors.blueAccent, 13 | child: Padding( 14 | padding: const EdgeInsets.all(18.0), //通过 EdgeInsets 来设置 padding的值 15 | child: Container( 16 | height: 100.0, 17 | width: 100.0, 18 | color: Colors.amberAccent, 19 | ), 20 | ), 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Spacing/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../../model/widget.dart'; 4 | import './Padding/index.dart' as Padding; 5 | import './SliverPadding/index.dart' as SliverPadding; 6 | import './AnimatedPadding/index.dart' as AnimatedPadding; 7 | 8 | List widgetPoints = [ 9 | WidgetPoint( 10 | name: 'Padding', 11 | routerName: Padding.Demo.routeName, 12 | buildRouter: (BuildContext context) => Padding.Demo(), 13 | ), 14 | WidgetPoint( 15 | name: 'SliverPadding', 16 | routerName: SliverPadding.Demo.routeName, 17 | buildRouter: (BuildContext context) => SliverPadding.Demo(), 18 | ), 19 | WidgetPoint( 20 | name: 'AnimatedPadding', 21 | routerName: AnimatedPadding.Demo.routeName, 22 | buildRouter: (BuildContext context) => AnimatedPadding.Demo(), 23 | ), 24 | ]; 25 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Stack/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/model/widget.dart'; 4 | import './Stack/index.dart' as Stack; 5 | import './IndexedStack/index.dart' as IndexedStack; 6 | 7 | List widgetPoints = [ 8 | WidgetPoint( 9 | name: 'Stack', 10 | routerName: Stack.Demo.routeName, 11 | buildRouter: (BuildContext context) => Stack.Demo(), 12 | ), 13 | WidgetPoint( 14 | name: 'IndexedStack', 15 | routerName: IndexedStack.Demo.routeName, 16 | buildRouter: (BuildContext context) => IndexedStack.Demo(), 17 | ), 18 | ]; 19 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Table/Table/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import './table_demo.dart'; 5 | 6 | const contentDesc0 = ''' 7 | ### **简介** 8 | > 一种布局方法 9 | - 一个可以对齐子元素进行table 布局算法的Widget 10 | '''; 11 | const contentDesc1 = ''' 12 | ### **基本用法** 13 | > 大多用于多行多列的需求 14 | - 如果你只有一行或者一列,其实选择Row和Column更合适一些 15 | - 表格中行的大小是根据列行数和宽度计算的来,控制列宽可以使用 columnWidth 属性 16 | - 注意,Table中每一行的列数需要一致,否则报错 17 | '''; 18 | 19 | class Demo extends StatefulWidget { 20 | static const String routeName = '/element/Frame/Table/Table'; 21 | _DemoState createState() => _DemoState(); 22 | } 23 | 24 | class _DemoState extends State { 25 | @override 26 | Widget build(BuildContext context) { 27 | return WidgetDemo( 28 | title: 'Table', 29 | codeUrl: 'elements/Frame/Table/Table/table_demo.dart', 30 | contentList: [ 31 | contentDesc0, 32 | contentDesc1, 33 | TableDemo(), 34 | ], 35 | docUrl: 'https://docs.flutter.io/flutter/widgets/Table-class.html', 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/Table/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../../model/widget.dart'; 4 | import './Table/index.dart' as Table; 5 | 6 | List widgetPoints = [ 7 | WidgetPoint( 8 | name: 'Table', 9 | routerName: Table.Demo.routeName, 10 | buildRouter: (BuildContext context) => Table.Demo(), 11 | ), 12 | ]; 13 | -------------------------------------------------------------------------------- /lib/widgets/elements/Frame/index.dart: -------------------------------------------------------------------------------- 1 | import 'Spacing/index.dart' as Spacing; 2 | import 'Expanded/index.dart' as Expanded; 3 | import 'Table/index.dart' as Table; 4 | import 'Align/index.dart' as Align; 5 | import 'Layout/index.dart' as Layout; 6 | import 'Stack/index.dart' as Stack; 7 | import 'Box/index.dart' as Box; 8 | 9 | List getWidgets() { 10 | List result = []; 11 | result.addAll(Spacing.widgetPoints); 12 | result.addAll(Expanded.widgetPoints); 13 | // result.addAll(Axis.widgetPoints); 14 | result.addAll(Table.widgetPoints); 15 | result.addAll(Align.widgetPoints); 16 | result.addAll(Layout.widgetPoints); 17 | result.addAll(Stack.widgetPoints); 18 | result.addAll(Box.widgetPoints); 19 | return result; 20 | } 21 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Canvas/CircleProgressBarPainter/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_go/components/widget_demo.dart'; 3 | import './demo.dart' as demoBoxs; 4 | 5 | const Text = ''' 6 | ### **简介** 7 | > 操作图形的界面; 8 | 9 | '''; 10 | const Text1 = ''' 11 | ### **基本用法** 12 | - canvas + Animation 实现一个 loading 效果; 13 | '''; 14 | 15 | class Demo extends StatefulWidget { 16 | static const String routeName = 17 | '/element/Media/Canvas/CircleProgressBarPainter'; 18 | 19 | _DemoState createState() => _DemoState(); 20 | } 21 | 22 | class _DemoState extends State { 23 | @override 24 | Widget build(BuildContext context) { 25 | return WidgetDemo( 26 | title: 'CircleProgressBarPainter', 27 | codeUrl: 'elements/Media/Canvas/CircleProgressBarPainter/demo.dart', 28 | contentList: [Text, Text1, demoBoxs.CustomViewPage()], 29 | docUrl: 'https://docs.flutter.io/flutter/dart-ui/Canvas-class.html', 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Canvas/PainterSketch/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import './demo.dart' as demoBoxs; 5 | 6 | const Text = ''' 7 | ### **简介** 8 | > 操作图形的界面; 9 | 10 | '''; 11 | const Text1 = ''' 12 | ### **基本用法** 13 | - canvas + paint + GestureDetector 实现一个 简易的画板; 14 | '''; 15 | 16 | class Demo extends StatefulWidget { 17 | static const String routeName = '/element/Media/Canvas/PainterSketch'; 18 | 19 | _DemoState createState() => _DemoState(); 20 | } 21 | 22 | class _DemoState extends State { 23 | @override 24 | Widget build(BuildContext context) { 25 | return WidgetDemo( 26 | title: 'PainterSketch', 27 | codeUrl: 'elements/Media/Canvas/PainterSketch/demo.dart', 28 | contentList: [Text, Text1, demoBoxs.PainterSketchDome()], 29 | docUrl: 'https://docs.flutter.io/flutter/dart-ui/Paint-class.html', 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Canvas/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_go/model/widget.dart'; 2 | import "package:flutter/material.dart"; 3 | 4 | import 'PainterSketch/index.dart' as PainterSketch; 5 | import 'Canvas/index.dart' as Canvas; 6 | import 'PainterPath/index.dart' as PainterPath; 7 | import 'CircleProgressBarPainter/index.dart' as CircleProgressBarPainter; 8 | 9 | List widgetPoints = [ 10 | WidgetPoint( 11 | name: 'PainterSketch', 12 | routerName: PainterSketch.Demo.routeName, 13 | buildRouter: (BuildContext context) => PainterSketch.Demo(), 14 | ), 15 | WidgetPoint( 16 | name: 'Canvas', 17 | routerName: Canvas.Demo.routeName, 18 | buildRouter: (BuildContext context) => Canvas.Demo(), 19 | ), 20 | WidgetPoint( 21 | name: 'PainterPath', 22 | routerName: PainterPath.Demo.routeName, 23 | buildRouter: (BuildContext context) => PainterPath.Demo(), 24 | ), 25 | WidgetPoint( 26 | name: 'CircleProgressBarPainter', 27 | routerName: CircleProgressBarPainter.Demo.routeName, 28 | buildRouter: (BuildContext context) => CircleProgressBarPainter.Demo(), 29 | ) 30 | ]; 31 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Icon/Icon/demo.dart: -------------------------------------------------------------------------------- 1 | /// Author: xiaojia.dxj 2 | /// Date: 2018-12-15 15:10:34 3 | /// Email: xiaojia.dxj@alibaba-inc.com 4 | /// Last Modified by: xiaojia.dxj 5 | /// Last Modified time: 2018-12-17 11:09:17 6 | import 'package:flutter/material.dart'; 7 | 8 | class IconDemo extends StatelessWidget { 9 | final Color curColor; 10 | 11 | IconDemo({Key key, this.curColor}) : super(); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Container( 16 | child: Icon( 17 | Icons.favorite, 18 | color: this.curColor, 19 | size: 30.0, 20 | ), 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Icon/IconData/demo.dart: -------------------------------------------------------------------------------- 1 | /// Author: xiaojia.dxj 2 | /// Date: 2018-12-15 10:15:34 3 | /// Email: xiaojia.dxj@alibaba-inc.com 4 | /// Last Modified by: xiaojia.dxj 5 | /// Last Modified time: 2018-12-17 11:38:50 6 | import 'package:flutter/material.dart'; 7 | 8 | class IconDataDemo extends StatelessWidget { 9 | final Color curColor; 10 | 11 | IconDataDemo({Key key, this.curColor}) : super(); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Container( 16 | child: Icon( 17 | //参考 icon constans 18 | IconData(0xe567, fontFamily: 'MaterialIcons', matchTextDirection: true), 19 | color: this.curColor, 20 | size: 30.0, 21 | ), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Icon/ImageIcon/demo.dart: -------------------------------------------------------------------------------- 1 | /// Author: xiaojia.dxj 2 | /// Date: 2018-12-15 15:19:41 3 | /// Email: xiaojia.dxj@alibaba-inc.com 4 | /// Last Modified by: xiaojia.dxj 5 | /// Last Modified time: 2018-12-17 10:07:19 6 | 7 | import 'package:flutter/material.dart'; 8 | 9 | class ImageIconDemo extends StatelessWidget { 10 | @override 11 | Widget build(BuildContext context) { 12 | //注意:当你用一个图片的时候,这个图片会被整个覆盖,只保留图片的形状,填充你设置的颜色 13 | return ImageIcon( 14 | AssetImage('assets/images/btn_icon_dingyuehao_normal.png'), 15 | color: Colors.red, 16 | size: 50.0, 17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Icon/ImageIcon/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_go/components/widget_demo.dart'; 3 | import './demo.dart'; 4 | 5 | const Text = ''' 6 | ### **简介** 7 | > 来自ImageProvider的图标,例如AssetImage。 8 | - 图标由其名称标示 9 | '''; 10 | const Text1 = ''' 11 | ### **基本用法** 12 | - 创建图像图标,在size和color默认为当前给定的值IconTheme 13 | - 当你用一个图片时,这个图片会被填充你设置的颜色,只保留图片的形状, 14 | - 即填充图片像素所在的所有位置 15 | '''; 16 | 17 | class Demo extends StatefulWidget { 18 | static const String routeName = '/element/Media/Icon/ImageIcon'; 19 | 20 | _DemoState createState() => _DemoState(); 21 | } 22 | 23 | class _DemoState extends State { 24 | @override 25 | Widget build(BuildContext context) { 26 | return WidgetDemo( 27 | title: 'ImageIcon', 28 | codeUrl: 'elements/Media/Icon/ImageIcon/demo.dart', 29 | contentList: [ 30 | Text, 31 | Text1, 32 | ImageIconDemo(), 33 | ], 34 | docUrl: 'https://docs.flutter.io/flutter/widgets/ImageIcon-class.html', 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Icon/index.dart: -------------------------------------------------------------------------------- 1 | import '../../../../model/widget.dart'; 2 | import "package:flutter/material.dart"; 3 | 4 | import 'Icon/index.dart' as Icon; 5 | import 'ImageIcon/index.dart' as ImageIcon; 6 | import 'IconTheme/index.dart' as IconTheme; 7 | import 'IconData/index.dart' as IconData; 8 | import 'IconThemeData/index.dart' as IconThemeData; 9 | 10 | List widgetPoints = [ 11 | WidgetPoint( 12 | name: 'Icon', 13 | routerName: Icon.Demo.routeName, 14 | buildRouter: (BuildContext context) => Icon.Demo(), 15 | ), 16 | WidgetPoint( 17 | name: 'ImageIcon', 18 | routerName: ImageIcon.Demo.routeName, 19 | buildRouter: (BuildContext context) => ImageIcon.Demo(), 20 | ), 21 | WidgetPoint( 22 | name: 'IconTheme', 23 | routerName: IconTheme.Demo.routeName, 24 | buildRouter: (BuildContext context) => IconTheme.Demo(), 25 | ), 26 | WidgetPoint( 27 | name: 'IconData', 28 | routerName: IconData.Demo.routeName, 29 | buildRouter: (BuildContext context) => IconData.Demo(), 30 | ), 31 | WidgetPoint( 32 | name: 'IconThemeData', 33 | routerName: IconThemeData.Demo.routeName, 34 | buildRouter: (BuildContext context) => IconThemeData.Demo(), 35 | ), 36 | ]; 37 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/AssetImage/assetImage_demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AssetImageDemo extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Column( 7 | children: [ 8 | CircleAvatar( 9 | backgroundImage: AssetImage('assets/images/food01.jpeg'), 10 | ), 11 | Container( 12 | child: Image( 13 | image: AssetImage('assets/images/food02.jpeg'), 14 | height: 300.0, 15 | width: 300.0, 16 | ), 17 | ) 18 | ], 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/DecorationImage/decorationImage_demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class DecorationImageDemo extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Container( 7 | child: Center( 8 | child: Text( 9 | 'Container', 10 | style: TextStyle(color: Colors.red), 11 | ), 12 | ), 13 | height: 200.0, 14 | width: 200.0, 15 | decoration: BoxDecoration( 16 | color: Colors.blueAccent, 17 | image: DecorationImage( 18 | image: AssetImage('assets/images/food02.jpeg'), fit: BoxFit.cover), 19 | ), 20 | margin: const EdgeInsets.only(top: 10.0), 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/DecorationImage/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-11-16 15:09:12 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-11-16 15:12:39 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import './decorationImage_demo.dart'; 10 | 11 | const contentText0 = ''' 12 | ### **简介** 13 | 14 | > 修饰Box的图片 15 | '''; 16 | 17 | const contentText1 = ''' 18 | ### **基本用法** 19 | 20 | > demo演示作为背景图片的样例 21 | 22 | - 一般配合BoxDecoration的img属性使用,设置背景图片 23 | - 也可以配合paintImage使用 24 | '''; 25 | 26 | class Demo extends StatefulWidget { 27 | static const String routeName = '/element/Media/Image/DecorationImage'; 28 | _DemoState createState() => _DemoState(); 29 | } 30 | 31 | class _DemoState extends State { 32 | @override 33 | Widget build(BuildContext context) { 34 | return WidgetDemo( 35 | contentList: [ 36 | contentText0, 37 | contentText1, 38 | DecorationImageDemo(), 39 | ], 40 | codeUrl: 'elements/Media/Image/DecorationImage/decorationImage_demo.dart', 41 | docUrl: 42 | 'https://docs.flutter.io/flutter/painting/DecorationImage-class.html', 43 | title: 'DecorationImage', 44 | ); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/DecorationImagePainter/decoration_image_painter_demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class DecorationImagePainterDemo extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Container(); 7 | } 8 | } 9 | 10 | // class ImagePainter extends CustomPainter{ 11 | 12 | // Future getImage(String path) async { 13 | // ByteData data = await rootBundle.load(path); 14 | // ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List()); 15 | // FrameInfo frameInfo = await codec.getNextFrame(); 16 | // image = frameInfo.image; 17 | // return image; 18 | // } 19 | 20 | // @override 21 | // void paint(Canvas canvas, Size size) { 22 | // Paint paint = Paint() 23 | // ..color = Colors.black12 24 | // ..strokeCap = StrokeCap.round 25 | // ..strokeWidth = 3.0; 26 | // Image _image = Image(image: AssetImage('assets/images/food03.jpeg'),); 27 | // canvas.drawImage(_image,Offset.zero & size,paint)); 28 | // } 29 | 30 | // @override 31 | // bool shouldRepaint(CustomPainter oldDelegate) { 32 | // // TODO: implement shouldRepaint 33 | // return false; 34 | // } 35 | // } 36 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/DecorationImagePainter/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-11-16 15:09:12 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-11-16 15:09:12 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | 10 | const contentText0 = ''' 11 | ### **简介** 12 | '''; 13 | 14 | class Demo extends StatefulWidget { 15 | static const String routeName = '/element/Media/Image/DecorationImagePainter'; 16 | _DemoState createState() => _DemoState(); 17 | } 18 | 19 | class _DemoState extends State { 20 | @override 21 | Widget build(BuildContext context) { 22 | return WidgetDemo( 23 | contentList: [], 24 | docUrl: 25 | 'https://docs.flutter.io/flutter/painting/DecorationImagePainter-class.html', 26 | codeUrl: 27 | 'elements/Media/Image/DecorationImagePainter/decoration_image_painter_demo.dart', 28 | title: 'DecorationImagePainter'); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/ExactAssetImage/exact_asset_image_demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ExactAssetImageDemo extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Column( 7 | children: [ 8 | Image( 9 | image: ExactAssetImage('assets/images/food02.jpeg', scale: 1.5), 10 | ), 11 | SizedBox( 12 | height: 20.0, 13 | ), 14 | Image( 15 | image: ExactAssetImage('assets/images/food02.jpeg', scale: 1.0), 16 | ), 17 | ], 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/ExactAssetImage/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-08 13:29:34 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-08 14:12:21 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import './exact_asset_image_demo.dart'; 10 | 11 | const contentText0 = ''' 12 | ### **简介** 13 | > 类似带有scale属性的AssetImage 14 | 15 | 从```Image.asset```源码中可以看到 16 | 17 | '''; 18 | 19 | const contentText1 = ''' 20 | ### **基本使用** 21 | - 使用方法与AssetImage类似 22 | - 可以理解为带有scale属性的AssetImage 23 | '''; 24 | 25 | class Demo extends StatefulWidget { 26 | static const String routeName = '/element/Media/Image/ExactAssetImage'; 27 | _DemoState createState() => _DemoState(); 28 | } 29 | 30 | class _DemoState extends State { 31 | @override 32 | Widget build(BuildContext context) { 33 | return WidgetDemo( 34 | contentList: [ 35 | contentText0, 36 | contentText1, 37 | ExactAssetImageDemo(), 38 | ], 39 | title: 'ExactAssetImage', 40 | codeUrl: 41 | 'elements/Media/Image/ExactAssetImage/exact_asset_image_demo.dart', 42 | docUrl: 43 | 'https://docs.flutter.io/flutter/painting/ExactAssetImage-class.html', 44 | ); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/FadeInImage/fade_in_image_demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-08 16:08:41 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-08 16:22:50 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | class FadeInImageDemo extends StatelessWidget { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Column( 12 | children: [ 13 | ClipOval( 14 | child: FadeInImage.assetNetwork( 15 | placeholder: "assets/images/normal_user_icon.png", //预览图 16 | fit: BoxFit.fitWidth, 17 | image: 18 | "https://img.alicdn.com/tfs/TB148sWfMHqK1RjSZFgXXa7JXXa-536-482.png", 19 | width: 160.0, 20 | height: 160.0, 21 | ), 22 | ), 23 | SizedBox( 24 | height: 20.0, 25 | ), 26 | CircleAvatar( 27 | backgroundImage: NetworkImage( 28 | "https://img.alicdn.com/tfs/TB148sWfMHqK1RjSZFgXXa7JXXa-536-482.png"), 29 | child: Text("一凨"), //可以在图片上添加文字等等 30 | ), 31 | ], 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/FileImage/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-08 16:20:33 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-08 19:24:33 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import './file_image_demo.dart'; 10 | 11 | const contentText0 = ''' 12 | ### **简介** 13 | > 用于展示本地的文件 14 | - 将给定的File对象解码为图片 15 | - 可以指定缩放scale 16 | '''; 17 | 18 | const contentText1 = ''' 19 | ### **基本用法** 20 | > 简写形式和Image也都非常相似 21 | - Image.file 是ImageFile 的一种简写形式 22 | '''; 23 | 24 | class Demo extends StatefulWidget { 25 | static const String routeName = '/element/Media/Image/FileImage'; 26 | _DemoState createState() => _DemoState(); 27 | } 28 | 29 | class _DemoState extends State { 30 | @override 31 | Widget build(BuildContext context) { 32 | return WidgetDemo( 33 | codeUrl: 'elements/Media/Image/FileImage/file_image_demo.dart', 34 | docUrl: 'https://docs.flutter.io/flutter/painting/FileImage-class.html', 35 | title: 'FileImage', 36 | contentList: [ 37 | contentText0, 38 | contentText1, 39 | FileImageDemo(), 40 | ], 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/Image/demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2019-01-07 15:33:49 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2019-01-07 15:45:29 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | class ImageDemo extends StatelessWidget { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | child: Image.asset( 13 | 'assets/images/food05.jpeg', 14 | fit: BoxFit.contain, 15 | ), 16 | height: 300.0, 17 | width: 300.0, 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/MemoryImage/memory_image_demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-08 17:49:19 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-08 20:46:37 5 | 6 | import 'dart:typed_data'; 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter/services.dart' show rootBundle; 10 | 11 | class MemoryImageDemo extends StatefulWidget { 12 | _MemoryImageDemoState createState() => _MemoryImageDemoState(); 13 | } 14 | 15 | class _MemoryImageDemoState extends State { 16 | Uint8List bytes; 17 | 18 | void initState() { 19 | super.initState(); 20 | rootBundle.load('assets/images/food01.jpeg').then((data) { 21 | if (mounted) { 22 | setState(() { 23 | bytes = data.buffer.asUint8List(); 24 | }); 25 | } 26 | }); 27 | } 28 | 29 | @override 30 | Widget build(BuildContext context) { 31 | final decoration = BoxDecoration( 32 | image: bytes == null 33 | ? null 34 | : DecorationImage( 35 | image: MemoryImage(bytes, scale: 1.0), 36 | ), 37 | ); 38 | return Container( 39 | width: 300.0, 40 | height: 300.0, 41 | decoration: decoration, 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/NetworkImage/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-11-16 15:09:12 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-08 17:32:57 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import './network_image_demo.dart'; 10 | 11 | const contentText0 = ''' 12 | ### **简介** 13 | > 展示网络图片的widget 14 | - 我们可以使用NetworkImage来获取网络图片并展示 15 | '''; 16 | 17 | const contentText1 = ''' 18 | ### **基本用法** 19 | > Image.network 是 NetworkImage 提供给Image widget 的一种简写形式 20 | - 支持scale属性进行图片的缩放 21 | '''; 22 | 23 | class Demo extends StatefulWidget { 24 | static const String routeName = '/element/Media/Image/NetworkImage'; 25 | _DemoState createState() => _DemoState(); 26 | } 27 | 28 | class _DemoState extends State { 29 | @override 30 | Widget build(BuildContext context) { 31 | return WidgetDemo( 32 | contentList: [ 33 | contentText0, 34 | contentText1, 35 | NetworkImageDemo(), 36 | ], 37 | codeUrl: 'elements/Media/Image/NetworkImage/network_image_demo.dart', 38 | docUrl: 39 | 'https://docs.flutter.io/flutter/painting/NetworkImage-class.html', 40 | title: 'NetworkImage', 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/NetworkImage/network_image_demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-08 17:20:37 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-08 17:35:36 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | class NetworkImageDemo extends StatelessWidget { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Column( 12 | children: [ 13 | Container( 14 | margin: const EdgeInsets.symmetric(vertical: 20.0), 15 | child: Text('Image.network的使用'), 16 | ), 17 | Image.network( 18 | 'https://gw.alicdn.com/tfs/TB1XD.ZuYwrBKNjSZPcXXXpapXa-255-251.png'), 19 | Container( 20 | child: Text('NetworkImage的使用,带有0.5倍缩放'), 21 | margin: const EdgeInsets.symmetric(vertical: 20.0), 22 | ), 23 | Image( 24 | image: NetworkImage( 25 | 'https://gw.alicdn.com/tfs/TB1XD.ZuYwrBKNjSZPcXXXpapXa-255-251.png', 26 | scale: 0.5), 27 | ) 28 | ], 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/paintImage/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-11-16 15:09:12 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-08 20:19:01 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | 10 | const String contentText0 = ''' 11 | ### **非Widget 待删除** 12 | 13 | '''; 14 | 15 | const String contentText1 = ''' 16 | 17 | '''; 18 | 19 | class Demo extends StatefulWidget { 20 | static const String routeName = '/element/Media/Image/paintImage'; 21 | _DemoState createState() => _DemoState(); 22 | } 23 | 24 | class _DemoState extends State { 25 | @override 26 | Widget build(BuildContext context) { 27 | return WidgetDemo( 28 | contentList: [ 29 | contentText0, 30 | ], 31 | codeUrl: 'elements/Media/Image/paintImage/paint_image_demo.dart', 32 | docUrl: 'https://docs.flutter.io/flutter/painting/paintImage.html', 33 | title: 'paintImage', 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/paintImage/paint_image_demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-08 17:46:57 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-08 17:46:57 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | class PaintImageDemo extends StatelessWidget { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/precacheImage/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-11-16 15:09:12 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-11-16 15:09:12 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | class Demo extends StatefulWidget { 9 | static const String routeName = '/element/Media/Image/precacheImage'; 10 | _DemoState createState() => _DemoState(); 11 | } 12 | 13 | class _DemoState extends State { 14 | @override 15 | Widget build(BuildContext context) { 16 | return Container( 17 | child: null, 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/Image/precacheImage/precache_image_demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-08 17:47:57 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-08 17:48:20 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | class PrecacheImageDemo extends StatelessWidget { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/widgets/elements/Media/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-11-16 15:09:27 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-11-16 15:09:27 5 | 6 | import 'Image/index.dart' as Image; 7 | import 'Icon/index.dart' as Icon; 8 | import 'Canvas/index.dart' as Canvas; 9 | 10 | List getWidgets() { 11 | List result = []; 12 | result.addAll(Image.widgetPoints); 13 | result.addAll(Icon.widgetPoints); 14 | result.addAll(Canvas.widgetPoints); 15 | return result; 16 | } 17 | -------------------------------------------------------------------------------- /lib/widgets/elements/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-11-16 15:09:31 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-11-16 15:09:31 5 | 6 | import 'Form/index.dart' as Form; 7 | import 'Frame/index.dart' as Frame; 8 | import 'Media/index.dart' as Media; 9 | 10 | List getWidgets() { 11 | List result = []; 12 | result.addAll(Form.getWidgets()); 13 | result.addAll(Frame.getWidgets()); 14 | result.addAll(Media.getWidgets()); 15 | return result; 16 | } 17 | -------------------------------------------------------------------------------- /lib/widgets/index.dart: -------------------------------------------------------------------------------- 1 | import 'elements/index.dart' as elements; 2 | import 'components/index.dart' as components; 3 | import 'themes/index.dart' as themes; 4 | 5 | class WidgetDemoList { 6 | WidgetDemoList(); 7 | 8 | List getDemos() { 9 | List result = []; 10 | result.addAll(elements.getWidgets()); 11 | result.addAll(components.getWidgets()); 12 | result.addAll(themes.getWidgets()); 13 | return result; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoButton/demo.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 一晟 3 | /// Date: 2019/1/20 4 | /// Time: 上午11:34 5 | /// email: zhu.yan@alibaba-inc.com 6 | /// target: CupertinoButton 的示例 7 | 8 | import 'package:flutter/cupertino.dart'; 9 | import 'package:flutter/material.dart'; 10 | 11 | // Checkbox 默认按钮的实例 12 | // index 当前checkbox 的索引值 13 | class CupertinoButtonFullDefault extends StatefulWidget { 14 | const CupertinoButtonFullDefault() : super(); 15 | 16 | @override 17 | State createState() => _CupertinoButtonFullDefault(); 18 | } 19 | 20 | // CupertinoButton 默认的实例,有状态 21 | class _CupertinoButtonFullDefault extends State { 22 | @override 23 | Widget build(BuildContext context) { 24 | return CupertinoButton( 25 | borderRadius: BorderRadius.all(Radius.circular(15.0)), 26 | onPressed: () { 27 | print('on Pressed!'); 28 | }, 29 | pressedOpacity: 0.5, // 按下后的按钮不透明度 30 | color: CupertinoColors.inactiveGray, 31 | child: new Text('CupertinoButton'), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoButton/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 一晟 3 | /// Date: 2019/1/20 4 | /// Time: 下午10:57 5 | /// email: zhu.yan@alibaba-inc.com 6 | /// target: CupertinoButton 的示例 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_go/components/widget_demo.dart'; 10 | import './demo.dart' as demoBox; 11 | 12 | const String content0 = ''' 13 | ### **简介** 14 | > ios 风格的 button 15 | - 与普通的 button 一样,需要设置 text 或者 icon, 不同的是带有 fades out 效果; 16 | - 同时可以设置一个背景颜色; 17 | '''; 18 | 19 | const String content1 = ''' 20 | ### **基本用法** 21 | > CupertinoButton 的一个是示例 22 | - 属性基本和 flatButton,raisedButton 类似 23 | '''; 24 | 25 | class Demo extends StatefulWidget { 26 | static const String routeName = '/themes/Cupertino/CupertinoButton'; 27 | _DemoState createState() => _DemoState(); 28 | } 29 | 30 | class _DemoState extends State { 31 | @override 32 | Widget build(BuildContext context) { 33 | return WidgetDemo( 34 | contentList: [content0, content1, demoBox.CupertinoButtonFullDefault()], 35 | title: 'CupertinoButton', 36 | docUrl: 37 | 'https://docs.flutter.io/flutter/cupertino/CupertinoButton-class.html', 38 | codeUrl: 'themes/Cupertino/CupertinoButton/demo.dart', 39 | ); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoColors/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 一晟 3 | /// Date: 2019/1/20 4 | /// Time: 下午10:57 5 | /// email: zhu.yan@alibaba-inc.com 6 | /// target: CupertinoColors 的示例 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | import './demo.dart' as demoBox; 12 | 13 | const String content0 = ''' 14 | ### **简介** 15 | > iOS平台常用的颜色 16 | '''; 17 | 18 | const String content1 = ''' 19 | ### **基本用法** 20 | > CupertinoColors 的一个是示例 21 | '''; 22 | 23 | class Demo extends StatefulWidget { 24 | static const String routeName = '/themes/Cupertino/CupertinoColors'; 25 | _DemoState createState() => _DemoState(); 26 | } 27 | 28 | class _DemoState extends State { 29 | @override 30 | Widget build(BuildContext context) { 31 | return WidgetDemo( 32 | contentList: [content0, content1, demoBox.CupertinoColorsFullDefault()], 33 | title: 'CupertinoColors', 34 | docUrl: 35 | 'https://docs.flutter.io/flutter/cupertino/CupertinoColors-class.html', 36 | codeUrl: 'themes/Cupertino/CupertinoColors/demo.dart', 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoIcons/index.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 一晟 3 | /// Date: 2019/1/20 4 | /// Time: 下午10:57 5 | /// email: zhu.yan@alibaba-inc.com 6 | /// target: CupertinoButton 的示例 7 | 8 | import 'package:flutter/material.dart'; 9 | 10 | import 'package:flutter_go/components/widget_demo.dart'; 11 | import './demo.dart' as demoBox; 12 | 13 | const String content0 = ''' 14 | ### **简介** 15 | > Cupertino图标的标识符 16 | - 与Icon类一起使用以显示特定图标; 17 | - 请确保cupertino_icons在项目的pubspec.yaml文件中添加依赖项。这可确保CupertinoIcons字体包含在您的应用程序中; 18 | '''; 19 | 20 | const String content1 = ''' 21 | ### **基本用法** 22 | > CupertinoIcons 的一个示例 23 | '''; 24 | 25 | class Demo extends StatefulWidget { 26 | static const String routeName = '/themes/Cupertino/CupertinoIcons'; 27 | _DemoState createState() => _DemoState(); 28 | } 29 | 30 | class _DemoState extends State { 31 | @override 32 | Widget build(BuildContext context) { 33 | return WidgetDemo( 34 | contentList: [content0, content1, demoBox.CupertinoIconsFullDefault()], 35 | title: 'CupertinoIcons', 36 | docUrl: 37 | 'https://docs.flutter.io/flutter/cupertino/CupertinoIcons-class.html', 38 | codeUrl: 'themes/Cupertino/CupertinoIcons/demo.dart'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoScrollbar/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import 'demo.dart'; 5 | 6 | const Text0 = ''' 7 | ### **简介** 8 | > CupertinoScrollbar 是ios样式风格的滚动条 9 | 10 | 为其可滚动的子元素,构建一个ios风格样式的滚动条 11 | '''; 12 | 13 | const String Text1 = """ 14 | ### **基本用法** 15 | > 这里我们会用一个有CupertinoScrollbar和无CupertinoScrollbar的demo进行对比展示, 16 | 通过对比, 我们发现CupertinoScrollbar的子组件, 会有滚动的时候, 右侧会有一个滚动条. 17 | """; 18 | 19 | class Demo extends StatefulWidget { 20 | static const String routeName = 21 | '/element/themes/Cupertino/CupertinoScrollbar'; 22 | 23 | @override 24 | State createState() => _DemoState(); 25 | } 26 | 27 | class _DemoState extends State { 28 | @override 29 | Widget build(BuildContext context) { 30 | return WidgetDemo( 31 | title: 'CupertinoScrollbar', 32 | codeUrl: 'themes/Cupertino/CupertinoScrollbar/demo.dart', 33 | docUrl: 34 | 'https://docs.flutter.io/flutter/material/MaterialAccentColor-class.html', 35 | contentList: [ 36 | Text0, 37 | Text1, 38 | CupertinoScrollbarDemo(), 39 | NoCupertinoScrollbarDemo(), 40 | SizedBox(height: 100), 41 | ], 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoSegmentedControl/demo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class CupertinoSegmentedControlDemo extends StatefulWidget { 5 | _Demo createState() => _Demo(); 6 | } 7 | 8 | class _Demo extends State { 9 | String value = 'a'; 10 | @override 11 | Widget build(BuildContext context) { 12 | return CupertinoSegmentedControl( 13 | onValueChanged: (v) { 14 | this.setState(() { 15 | value = v; 16 | }); 17 | }, 18 | pressedColor: Color(0xff7c1c25), 19 | borderColor: Color(0xffac172a), 20 | selectedColor: Color(0xffac172a), 21 | groupValue: value, 22 | children: { 23 | 'a': Container( 24 | alignment: Alignment.center, width: 130.0, child: Text('a')), 25 | 'c': Text('C'), 26 | 'b': Text('B'), 27 | }, 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoSlider/demo.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 15/01/2019 4 | /// Time: 22:23 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: xxx 7 | 8 | import 'package:flutter/cupertino.dart'; 9 | import 'package:flutter/material.dart'; 10 | 11 | class CupertinoSliderDemo extends StatefulWidget { 12 | _Demo createState() => _Demo(); 13 | } 14 | 15 | class _Demo extends State { 16 | double value = 0.0; 17 | @override 18 | Widget build(BuildContext context) { 19 | return CupertinoSlider( 20 | value: value, //实际进度的位置 21 | min: 0.0, 22 | max: 100.0, 23 | divisions: 100, 24 | activeColor: Colors.blue, //进度中活动部分的颜色 25 | onChanged: (double) { 26 | setState(() { 27 | value = double.roundToDouble(); 28 | }); 29 | }, 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoSlider/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import 'demo.dart'; 5 | 6 | const Text0 = ''' 7 | ### **简介** 8 | > 用来选择范围性的数据 9 | 10 | CupertinoSlider 是ios风格的Slide组件,用来选择连续性的或者非连续性的数据. 默认是在一段最大值最小值间做任意值的选择. 如果你想选择间隔性的值, 例如0.0到50.0间,选择10, 15,...50.0这样的值, 给divisions设定一个非空的整数5,, 去分割区间范围. 11 | 12 | ### **基本用法** 13 | 14 | > 与 Slider 相同, 具体查看Slider组件 15 | '''; 16 | 17 | class Demo extends StatefulWidget { 18 | static const String routeName = '/element/themes/Cupertino/CupertinoSlider'; 19 | 20 | @override 21 | State createState() => _DemoState(); 22 | } 23 | 24 | class _DemoState extends State { 25 | @override 26 | Widget build(BuildContext context) { 27 | return WidgetDemo( 28 | title: 'CupertinoSlider', 29 | codeUrl: 'themes/Cupertino/CupertinoSlider/demo.dart', 30 | docUrl: 31 | 'https://docs.flutter.io/flutter/cupertino/CupertinoSlider-class.html', 32 | contentList: [ 33 | Text0, 34 | CupertinoSliderDemo(), 35 | SizedBox(height: 100), 36 | ], 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoSliverNavigationBar/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import 'demo.dart'; 5 | 6 | const Text0 = ''' 7 | ### **简介** 8 | > ios-11风格下拥有一个较大标题块的导航栏目 9 | 10 | ### **基本用法** 11 | 12 | > 该组件使用时. 必须做为含有slivers属性的滚动列表的子组件中,例如CustomScrollView 13 | '''; 14 | 15 | class Demo extends StatefulWidget { 16 | static const String routeName = 17 | '/element/themes/Cupertino/CupertinoSliverNavigationBar'; 18 | 19 | @override 20 | State createState() => _DemoState(); 21 | } 22 | 23 | class _DemoState extends State { 24 | @override 25 | Widget build(BuildContext context) { 26 | return WidgetDemo( 27 | title: 'CupertinoSlider', 28 | codeUrl: 'themes/Cupertino/CupertinoSliverNavigationBar/demo.dart', 29 | docUrl: 30 | 'https://docs.flutter.io/flutter/cupertino/CupertinoSliverNavigationBar-class.html', 31 | contentList: [ 32 | Text0, 33 | CupertinoSliverNavigationBarDemo(), 34 | SizedBox(height: 100), 35 | ], 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoSwitch/demo.dart: -------------------------------------------------------------------------------- 1 | /// Created with Android Studio. 2 | /// User: 三帆 3 | /// Date: 15/01/2019 4 | /// Time: 22:23 5 | /// email: sanfan.hx@alibaba-inc.com 6 | /// target: CupertinoSwitchDemo 7 | 8 | import 'package:flutter/cupertino.dart'; 9 | import 'package:flutter/material.dart'; 10 | 11 | class CupertinoSwitchDemo extends StatefulWidget { 12 | _Demo createState() => _Demo(); 13 | } 14 | 15 | class _Demo extends State { 16 | bool _lights = false; 17 | @override 18 | Widget build(BuildContext context) { 19 | return MergeSemantics( 20 | child: ListTile( 21 | title: Text('CupertinoSwitch'), 22 | trailing: CupertinoSwitch( 23 | activeColor: Colors.yellow, 24 | value: _lights, 25 | onChanged: (bool value) { 26 | setState(() { 27 | _lights = value; 28 | }); 29 | }, 30 | ), 31 | onTap: () { 32 | setState(() { 33 | _lights = !_lights; 34 | }); 35 | }, 36 | ), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoSwitch/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | 5 | import 'demo.dart'; 6 | 7 | const Text0 = ''' 8 | ### **简介** 9 | > ios风格下的Switch组件, 用法与Switch组件相同 10 | 11 | ### **基本用法** 12 | 13 | > 基本用法与Switch基本相同. 不同点在于, 该组件仅支持自定义activeColor, 也就是支持自定义当按钮处于true状态下,按钮的背景色. 14 | '''; 15 | 16 | class Demo extends StatefulWidget { 17 | static const String routeName = '/element/themes/Cupertino/CupertinoSwitch'; 18 | 19 | @override 20 | State createState() => _DemoState(); 21 | } 22 | 23 | class _DemoState extends State { 24 | @override 25 | Widget build(BuildContext context) { 26 | return WidgetDemo( 27 | title: 'CupertinoSlider', 28 | codeUrl: 'themes/Cupertino/CupertinoSwitch/demo.dart', 29 | docUrl: 30 | 'https://docs.flutter.io/flutter/cupertino/CupertinoSwitch-class.html', 31 | contentList: [Text0, CupertinoSwitchDemo()], 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/widgets/themes/Cupertino/CupertinoTabBar/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | 5 | import 'demo.dart'; 6 | 7 | const Text0 = ''' 8 | ### **简介** 9 | > ios风格下底部导航组件. 10 | 11 | 通过BottomNavigationBarItem列表,在屏幕底部展示多个小组件, 默认下选择第一个小组件; 12 | 13 | ### **基本用法** 14 | 15 | 这个组件, 没有任何内部状态, 使用时需要开发者自己去监听**onTap**方法, 主动为组件的属性**currentIndex**赋值 16 | 17 | 在官网上有这么一段文字: 18 | 19 | > If the given backgroundColor's opacity is not 1.0 (which is the case by default), it will produce a blurring effect to the content behind it. 20 | 21 | 本人试了很多次. 也没有发现这个Blur Effect是怎么触发的, 如果有人了解, 欢迎提PR. 22 | '''; 23 | 24 | class Demo extends StatefulWidget { 25 | static const String routeName = '/element/themes/Cupertino/CupertinoTabBar'; 26 | 27 | @override 28 | State createState() => _DemoState(); 29 | } 30 | 31 | class _DemoState extends State { 32 | @override 33 | Widget build(BuildContext context) { 34 | return WidgetDemo( 35 | title: 'CupertinoTabBar', 36 | codeUrl: 'themes/Cupertino/CupertinoTabBar/demo.dart', 37 | docUrl: 38 | 'https://docs.flutter.io/flutter/cupertino/CupertinoTabBar-class.html', 39 | contentList: [Text0, CupertinoTabBarDemo()], 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/widgets/themes/Material/MaterialAccentColor/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import 'package:flutter_go/widgets/themes/Material/MaterialColor/demo.dart'; 5 | 6 | const Text0 = ''' 7 | ### **简介** 8 | > 用来定义单一的强调色,以及四种色调的色系 9 | - 颜色的阴影用索引表示,索引较小的颜色比较浅,较大的索引比较暗。 10 | - 有个四个有效索引,100,200,400,和700.此颜色的值应与索引200和shade200的值相同。 11 | '''; 12 | 13 | const String Text1 = """ 14 | ### **基本用法** 15 | > 这里我们配合Icon来进行演示 16 | - 颜色的值应与指数500和shade500的值相同 17 | """; 18 | 19 | class Demo extends StatefulWidget { 20 | static const String routeName = 21 | '/element/themes/Material/MaterialAccentColor'; 22 | 23 | @override 24 | State createState() => _DemoState(); 25 | } 26 | 27 | class _DemoState extends State { 28 | @override 29 | Widget build(BuildContext context) { 30 | return WidgetDemo( 31 | title: 'MaterialAccentColor', 32 | codeUrl: 'themes/Material/MaterialColor/demo.dart', 33 | docUrl: 34 | 'https://docs.flutter.io/flutter/material/MaterialAccentColor-class.html', 35 | contentList: [ 36 | Text0, 37 | Text1, 38 | ColorDemo(), 39 | ], 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/widgets/themes/Material/MaterialApp/demo.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-27 16:25:25 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-27 16:25:25 5 | 6 | // !!! 代码示例,并非Demo 7 | // import 'package:flutter/material.dart'; 8 | // class MaterialApp extends StatelessWidget { 9 | // @override 10 | // Widget build(BuildContext context) { 11 | // return MaterialApp( 12 | // title: 'title', 13 | // theme: ThemeData( 14 | // primaryColor: Color(ThemeColor), 15 | // backgroundColor: Color(0xFFEFEFEF), 16 | // accentColor: Color(0xFF888888), 17 | // textTheme: TextTheme( 18 | // //设置Material的默认字体样式 19 | // body1: TextStyle(color: Color(0xFF888888), fontSize: 16.0), 20 | // ), 21 | // iconTheme: IconThemeData( 22 | // color: Color(ThemeColor), 23 | // size: 35.0, 24 | // ), 25 | // ), 26 | // home: MyHomePage(), 27 | // onGenerateRoute: Application.router.generator, 28 | // ); 29 | // } 30 | // } 31 | -------------------------------------------------------------------------------- /lib/widgets/themes/Material/MaterialColor/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: 一凨 2 | /// @Date: 2018-12-27 16:25:22 3 | /// @Last Modified by: 一凨 4 | /// @Last Modified time: 2018-12-27 16:35:39 5 | 6 | import 'package:flutter/material.dart'; 7 | 8 | import 'package:flutter_go/components/widget_demo.dart'; 9 | import './demo.dart'; 10 | 11 | const String content0 = ''' 12 | ### **简介** 13 | > 定义单色以及具有十种色调的色样 14 | - 颜色的阴影由索引引用。指数越大,颜色越深。总共有十个有效指数:50、100、200、...、900. 15 | '''; 16 | 17 | const String content1 = ''' 18 | ### **基础用法** 19 | > 这里我们配合Icon来进行演示 20 | - 颜色的值应与指数500和shade500的值相同 21 | '''; 22 | 23 | class Demo extends StatefulWidget { 24 | static const String routeName = '/Themes/Material/MaterialColor'; 25 | 26 | _DemoState createState() => _DemoState(); 27 | } 28 | 29 | class _DemoState extends State { 30 | @override 31 | Widget build(BuildContext context) { 32 | return WidgetDemo( 33 | contentList: [ 34 | content0, 35 | content1, 36 | ColorDemo(), 37 | ], 38 | title: "MaterialColor", 39 | codeUrl: 'themes/Material/MaterialColor/demo.dart', 40 | docUrl: 41 | 'https://docs.flutter.io/flutter/material/MaterialColor-class.html', 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/widgets/themes/Material/MaterialPageRoute/index.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_go/components/widget_demo.dart'; 4 | import './demo.dart'; 5 | 6 | const Text0 = ''' 7 | ### **简介** 8 | > 页面跳转携带参数替换整个屏幕的页面路由。 9 | - 对于Android,页面的进入以下方滑动向上,页面退出,以上方滑动向下方。在ios上,页面进度从右边滑入,退出相反。 10 | - 默认情况下,当路由器被另外一个替换时,前一个路由将被保留在内存中,如果希望在不需要的时候能够释放资源,请将maintainState设置为false 11 | '''; 12 | 13 | const String Text1 = """ 14 | ### **基本用法** 15 | > 如下图示例: 16 | 17 | """; 18 | 19 | class Demo extends StatefulWidget { 20 | static const String routeName = '/element/themes/Material/MaterialPageRoute'; 21 | 22 | @override 23 | State createState() => _DemoState(); 24 | } 25 | 26 | class _DemoState extends State { 27 | @override 28 | Widget build(BuildContext context) { 29 | return WidgetDemo( 30 | title: 'MaterialPageRoute', 31 | codeUrl: 'themes/Material/MaterialPageRoute/demo.dart', 32 | docUrl: 33 | 'https://docs.flutter.io/flutter/material/MaterialPageRoute-class.html', 34 | contentList: [ 35 | Text0, 36 | Text1, 37 | FirstPage(), 38 | ], 39 | ); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/widgets/themes/index.dart: -------------------------------------------------------------------------------- 1 | /// @Author: xiaojia.dxj 2 | /// @Date: 2018-12-24 16:31:09 3 | /// @Last Modified by: xiaojia.dxj 4 | /// @Last Modified time: 2018-12-24 16:31:09 5 | 6 | import './Material/index.dart' as Material; 7 | import './Cupertino/index.dart' as Cupertino; 8 | 9 | List getWidgets() { 10 | List result = []; 11 | result.addAll(Material.widgetPoints); 12 | result.addAll(Cupertino.widgetPoints); 13 | return result; 14 | } 15 | -------------------------------------------------------------------------------- /mupp_build_env_init.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | print 'entitlement config' 3 | cd ios 4 | ruby entitlement_config.rb 5 | cd .. 6 | #屏蔽Build Shell 7 | sed -i "" "s/\/bin\/sh \\\\\"\\\$FLUTTER_ROOT/#\/bin\/sh \\\\\"\\\$FLUTTER_ROOT/" ./ios/Runner.xcodeproj/project.pbxproj 8 | #拷贝已生成好的Dart代码中间产物 9 | mtl_dir="ios/Flutter_MTL/Flutter" 10 | flutter_dir="ios/Flutter" 11 | [ -d ${flutter_dir} ] || mkdir ${flutter_dir} 12 | rm -rf ${flutter_dir}/* 13 | cp -r ${mtl_dir}/ ${flutter_dir}/ 14 | sizeStr=`wc -c ${flutter_dir}/Flutter.framework/Flutter` 15 | lipoStr=`lipo -info ${flutter_dir}/Flutter.framework/Flutter` 16 | echo "[KWLM]Flutter.framework size:${sizeStr}${lipoStr}" 17 | cat ./ios/Runner.xcodeproj/project.pbxproj 18 | -------------------------------------------------------------------------------- /recruit: -------------------------------------------------------------------------------- 1 | 2 | --- 3 | 4 | ## 加个广告:团队招聘 5 | 6 | ### 🔥《阿里巴巴集团春季校园招聘》已经启动。 7 | 8 | - 团队获取此消息后第一时间,赶紧通知,各位刚走出校园的千里马,走进阿里的机会来了!!! 9 | 10 | 基本要求如下: 11 | 12 | - 招收 2019年11月-2020年10月 毕业的同学 13 | - 本次校招行动共执行四周,到 4月12日结束 14 | 15 | #### 🔔强调一下这次是校招哦!!!如果你有意向,又符合 2019年11月-2020年10月 的应届毕业生条件; 16 | 17 | - 不符合,也没关系,可以推荐优秀的学弟,学妹;增进一下“纯洁”的同学感情 👫😎。 18 | 19 | #### 请移步往下,关注我们《阿里拍卖团队》 的招聘信息。 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | #### 最重要的部分来了,手机扫描下面二维码,即可进入简历投递系统 28 | 29 | 30 | -------------------------------------------------------------------------------- /test/imp.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/test/imp.dart -------------------------------------------------------------------------------- /test/imp2.dart: -------------------------------------------------------------------------------- 1 | var router = [12,13,14]; 2 | -------------------------------------------------------------------------------- /test/test.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alibaba/flutter-go/a41b2124278e9f17d222ec1cea2ace3042be03f7/test/test.dart -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter 3 | // provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to 4 | // find child widgets in the widget tree, read text, and verify that the values of widget properties 5 | // are correct. 6 | 7 | import 'package:flutter/material.dart'; 8 | import 'package:flutter_test/flutter_test.dart'; 9 | 10 | import 'package:flutter_go/main.dart'; 11 | 12 | void main() { 13 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 14 | // Build our app and trigger a frame. 15 | await tester.pumpWidget(new MyApp()); 16 | 17 | // Verify that our counter starts at 0. 18 | expect(find.text('0'), findsOneWidget); 19 | expect(find.text('1'), findsNothing); 20 | 21 | // Tap the '+' icon and trigger a frame. 22 | await tester.tap(find.byIcon(Icons.add)); 23 | await tester.pump(); 24 | 25 | // Verify that our counter has incremented. 26 | expect(find.text('0'), findsNothing); 27 | expect(find.text('1'), findsOneWidget); 28 | }); 29 | } 30 | -------------------------------------------------------------------------------- /tools/getPR.sh: -------------------------------------------------------------------------------- 1 | 2 | #!/bin/bash 3 | 4 | # pr 日志生成器,自动 pr 工具抓取器,抓取两周前至今的,提交数据,并去重。 5 | # 生成一个 http 页面,打印成 markdown 格式 6 | # run $ bash tools/getPR.sh 7 | 8 | # git log --pretty="%h - %s - %ad" --author=ryan --since=2.weeks --no-merges > tools/log.txt 9 | 10 | logs=`git log --date=iso --since=2.weeks --no-merges --pretty=format:'{"commit": "-%h","author": "%aN <%aE>","date": "%ad","message": "%s"},'` 11 | 12 | log1=${logs} 13 | 14 | # echo ${log1%*,} 15 | 16 | echo '{"pr_req":['${log1%*,}']}' > tools/log.json 17 | 18 | node ./tools/parsLog.js --------------------------------------------------------------------------------