实例介绍
【实例简介】高仿书旗小说 Flutter 版
## 简介
这是一个用Flutter写的书旗小说客户端。
主要实现的功能有:
* 框架:App常用的Tab框架,UI根据系统字体设定自适应;
* 书城:3D轮播、菜单、五种通过API配置的卡片样式;
* 小说详情:导航栏样式切换动效、高斯模糊效果、文字伸缩;
* 书架:顶部云彩动效、导航栏样式切换动效、书籍展示;
* 我的:未登录/登录状态切换,菜单展示;
* 登录:获取验证码、用户登录、用户状态缓存、用户注销;
* 阅读:文章加载、横向翻页、菜单展示。
所有功能都是用Dart写的,iOS和Android的代码复用率达到了100%
我试着让这个Demo的结构尽量接近实际项目,同时使用比较简单方式去实现功能。这样可以让刚接触Flutter的人更够容易理解代码。
App中的网络请求均通过一个名为**Request**的工具类。在Request内部,通过**本地mock**方式,获取模拟数据。
## 第三方依赖
* [carousel_slider](https://pub.flutter-io.cn/packages/carousel_slider)
* [cached_network_image](https://pub.flutter-io.cn/packages/cached_network_image)
* [shared_preferences](https://pub.flutter-io.cn/packages/shared_preferences)
* [webview_flutter](https://pub.flutter-io.cn/packages/flutter_webview_plugin)
* [share](https://pub.flutter-io.cn/packages/share)
## 安装
1. **Clone the repo**
```
$ git clone https://github.com/huanxsd/flutter_shuqi.git
$ cd flutter_shuqi
```
2. **Running:**
```
$ flutter run
```
【实例截图】
.
├── flutter_shuqi
│ ├── README-ZH.md
│ ├── README.md
│ ├── android
│ │ ├── app
│ │ │ ├── build.gradle
│ │ │ └── src
│ │ │ ├── debug
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin
│ │ │ │ │ └── com
│ │ │ │ │ └── example
│ │ │ │ │ └── shuqi
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night
│ │ │ │ └── styles.xml
│ │ │ └── profile
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle
│ ├── img
│ │ ├── 2.0x
│ │ │ ├── actionbar_checkin.png
│ │ │ ├── actionbar_search.png
│ │ │ ├── aliuser_title_back_normal.9.png
│ │ │ ├── arrow_right.png
│ │ │ ├── bookshelf_add.png
│ │ │ ├── bookshelf_bg.png
│ │ │ ├── bookshelf_cloud_0.png
│ │ │ ├── bookshelf_cloud_1.png
│ │ │ ├── bookshelf_cloud_2.png
│ │ │ ├── bookshelf_cloud_3.png
│ │ │ ├── bookshelf_continue_read.png
│ │ │ ├── detail_chapter.png
│ │ │ ├── detail_down.png
│ │ │ ├── detail_fold_bg.png
│ │ │ ├── detail_latest.png
│ │ │ ├── detail_star.png
│ │ │ ├── detail_star_half.png
│ │ │ ├── detail_up.png
│ │ │ ├── detail_write_comment.png
│ │ │ ├── home_search.png
│ │ │ ├── home_tip.png
│ │ │ ├── icon_menu_catalog.png
│ │ │ ├── icon_menu_share.png
│ │ │ ├── me_action.png
│ │ │ ├── me_buy.png
│ │ │ ├── me_comment.png
│ │ │ ├── me_coupon.png
│ │ │ ├── me_date.png
│ │ │ ├── me_favorite.png
│ │ │ ├── me_feedback.png
│ │ │ ├── me_gift.png
│ │ │ ├── me_night.png
│ │ │ ├── me_record.png
│ │ │ ├── me_setting.png
│ │ │ ├── me_theme.png
│ │ │ ├── me_vip.png
│ │ │ ├── me_wallet.png
│ │ │ ├── menu_category.png
│ │ │ ├── menu_complete.png
│ │ │ ├── menu_publish.png
│ │ │ ├── menu_rank.png
│ │ │ ├── menu_vip.png
│ │ │ ├── placeholder_avatar.png
│ │ │ ├── pub_back_gray.png
│ │ │ ├── pub_back_white.png
│ │ │ ├── read_bg.png
│ │ │ ├── read_icon_brightness.png
│ │ │ ├── read_icon_catalog.png
│ │ │ ├── read_icon_chapter_next.png
│ │ │ ├── read_icon_chapter_previous.png
│ │ │ ├── read_icon_font.png
│ │ │ ├── read_icon_more.png
│ │ │ ├── read_icon_setting.png
│ │ │ ├── read_icon_vip.png
│ │ │ ├── read_icon_voice.png
│ │ │ ├── read_more_detail.png
│ │ │ ├── reader_battery.png
│ │ │ ├── tab_bookshelf_n.png
│ │ │ ├── tab_bookshelf_p.png
│ │ │ ├── tab_bookstore_n.png
│ │ │ ├── tab_bookstore_p.png
│ │ │ ├── tab_me_n.png
│ │ │ ├── tab_me_p.png
│ │ │ ├── tab_writer_n.png
│ │ │ └── tab_writer_p.png
│ │ ├── actionbar_checkin.png
│ │ ├── actionbar_search.png
│ │ ├── aliuser_title_back_normal.9.png
│ │ ├── arrow_right.png
│ │ ├── bookshelf_add.png
│ │ ├── bookshelf_bg.png
│ │ ├── bookshelf_cloud_0.png
│ │ ├── bookshelf_cloud_1.png
│ │ ├── bookshelf_cloud_2.png
│ │ ├── bookshelf_cloud_3.png
│ │ ├── bookshelf_continue_read.png
│ │ ├── detail_chapter.png
│ │ ├── detail_down.png
│ │ ├── detail_fold_bg.png
│ │ ├── detail_latest.png
│ │ ├── detail_star.png
│ │ ├── detail_star_half.png
│ │ ├── detail_up.png
│ │ ├── detail_write_comment.png
│ │ ├── home_search.png
│ │ ├── home_tip.png
│ │ ├── icon_menu_catalog.png
│ │ ├── icon_menu_share.png
│ │ ├── me_action.png
│ │ ├── me_buy.png
│ │ ├── me_comment.png
│ │ ├── me_coupon.png
│ │ ├── me_date.png
│ │ ├── me_favorite.png
│ │ ├── me_feedback.png
│ │ ├── me_gift.png
│ │ ├── me_night.png
│ │ ├── me_record.png
│ │ ├── me_setting.png
│ │ ├── me_theme.png
│ │ ├── me_vip.png
│ │ ├── me_wallet.png
│ │ ├── menu_category.png
│ │ ├── menu_complete.png
│ │ ├── menu_publish.png
│ │ ├── menu_rank.png
│ │ ├── menu_vip.png
│ │ ├── placeholder_avatar.png
│ │ ├── pub_back_gray.png
│ │ ├── pub_back_white.png
│ │ ├── read_bg.png
│ │ ├── read_icon_brightness.png
│ │ ├── read_icon_catalog.png
│ │ ├── read_icon_chapter_next.png
│ │ ├── read_icon_chapter_previous.png
│ │ ├── read_icon_font.png
│ │ ├── read_icon_more.png
│ │ ├── read_icon_setting.png
│ │ ├── read_icon_vip.png
│ │ ├── read_icon_voice.png
│ │ ├── read_more_detail.png
│ │ ├── reader_battery.png
│ │ ├── tab_bookshelf_n.png
│ │ ├── tab_bookshelf_p.png
│ │ ├── tab_bookstore_n.png
│ │ ├── tab_bookstore_p.png
│ │ ├── tab_me_n.png
│ │ ├── tab_me_p.png
│ │ ├── tab_writer_n.png
│ │ └── tab_writer_p.png
│ ├── ios
│ │ ├── Flutter
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Flutter.podspec
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Podfile.lock
│ │ ├── Runner
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── img_app-1.png
│ │ │ │ │ └── img_app.png
│ │ │ │ ├── Contents.json
│ │ │ │ └── LaunchImage.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── LaunchImage.png
│ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ └── img_loading.png
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── 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
│ ├── lib
│ │ ├── app
│ │ │ ├── app_navigator.dart
│ │ │ ├── app_scene.dart
│ │ │ ├── constant.dart
│ │ │ ├── request.dart
│ │ │ ├── root_scene.dart
│ │ │ ├── sq_color.dart
│ │ │ └── user_manager.dart
│ │ ├── bookshelf
│ │ │ ├── bookshelf_cloud_widget.dart
│ │ │ ├── bookshelf_header.dart
│ │ │ ├── bookshelf_item_view.dart
│ │ │ └── bookshelf_scene.dart
│ │ ├── global.dart
│ │ ├── home
│ │ │ ├── home_banner.dart
│ │ │ ├── home_list_view.dart
│ │ │ ├── home_menu.dart
│ │ │ ├── home_model.dart
│ │ │ ├── home_novel_cover_view.dart
│ │ │ ├── home_scene.dart
│ │ │ ├── home_section_view.dart
│ │ │ ├── novel_cell.dart
│ │ │ ├── novel_first_hybird_card.dart
│ │ │ ├── novel_four_grid_view.dart
│ │ │ ├── novel_grid_item.dart
│ │ │ ├── novel_normal_card.dart
│ │ │ └── novel_second_hybird_card.dart
│ │ ├── main.dart
│ │ ├── me
│ │ │ ├── code_button.dart
│ │ │ ├── login_scene.dart
│ │ │ ├── me_cell.dart
│ │ │ ├── me_header.dart
│ │ │ ├── me_scene.dart
│ │ │ ├── setting_scene.dart
│ │ │ └── web_scene.dart
│ │ ├── model
│ │ │ ├── article.dart
│ │ │ ├── chapter.dart
│ │ │ ├── novel.dart
│ │ │ └── novel_comment.dart
│ │ ├── novel_detail
│ │ │ ├── novel_comment_cell.dart
│ │ │ ├── novel_detail_cell.dart
│ │ │ ├── novel_detail_header.dart
│ │ │ ├── novel_detail_recommend_view.dart
│ │ │ ├── novel_detail_scene.dart
│ │ │ ├── novel_detail_toolbar.dart
│ │ │ └── novel_summary_view.dart
│ │ ├── public.dart
│ │ ├── reader
│ │ │ ├── article_provider.dart
│ │ │ ├── battery_view.dart
│ │ │ ├── reader_config.dart
│ │ │ ├── reader_menu.dart
│ │ │ ├── reader_overlayer.dart
│ │ │ ├── reader_page_agent.dart
│ │ │ ├── reader_scene.dart
│ │ │ ├── reader_utils.dart
│ │ │ └── reader_view.dart
│ │ ├── utility
│ │ │ ├── event_bus.dart
│ │ │ ├── screen.dart
│ │ │ ├── styles.dart
│ │ │ ├── toast.dart
│ │ │ └── utility.dart
│ │ └── widget
│ │ ├── novel_cover_image.dart
│ │ └── novel_cover_view.dart
│ ├── mock
│ │ ├── article_1000.json
│ │ ├── article_1001.json
│ │ ├── article_1002.json
│ │ ├── article_1003.json
│ │ ├── article_1004.json
│ │ ├── article_1005.json
│ │ ├── article_1006.json
│ │ ├── bookshelf.json
│ │ ├── catalog.json
│ │ ├── home_cartoon.json
│ │ ├── home_excellent.json
│ │ ├── home_female.json
│ │ ├── home_male.json
│ │ ├── login.json
│ │ ├── novel_comment.json
│ │ ├── novel_detail.json
│ │ ├── novel_recommend.json
│ │ └── sms.json
│ ├── pubspec.lock
│ ├── pubspec.yaml
│ └── screenshot
│ ├── android_0.png
│ ├── android_1.png
│ ├── android_2.png
│ ├── ios_0.png
│ ├── ios_1.png
│ └── ios_2.png
└── 高仿书旗小说 Flutter 版.rar
51 directories, 265 files
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论