Flutter-从入门到项目 07: 微信项目-发现页面 - 图1

Flutter-从入门到项目 07: 微信项目-发现页面

Flutter 专题目录汇总: 这个目录方便大家快速查询你要学习的内容!!!

二: 微信项目发现页面

这个页面涉及到的可能前面没有讲解 就是关于布局. 在Flutter的世界里更多的是弹性盒子布局

弹性布局允许子组件按照一定比例来分配父容器空间。弹性布局的概念在其它 UI系统 中也都存在,如H5 中的弹性盒子布局,Android 中的 FlexboxLayout 等。Flutter 中的弹性布局主要通过FlexExpanded 来配合实现。

Flutter-从入门到项目 07: 微信项目-发现页面 - 图2

如果大家对这个还不是很理解,可以参考一下 : Flutter之 Flex 布局

① 发现页面实现

有上面弹性盒子布局的基础 下面我们开始搭建页面吧

  1. import 'package:flutter/material.dart';
  2. import 'package:wecaht/pages/discover/kc_discover_cell.dart';
  3. class KCDiscoverPage extends StatefulWidget {
  4. @override
  5. _KCDiscoverPageState createState() => _KCDiscoverPageState();
  6. }
  7. class _KCDiscoverPageState extends State<KCDiscoverPage> {
  8. Color _themeColor = Color.fromRGBO(220, 220, 220, 1.0);
  9. @override
  10. Widget build(BuildContext context) {
  11. return Scaffold(
  12. appBar: AppBar(
  13. backgroundColor: _themeColor,
  14. centerTitle: true,
  15. elevation: 0.0,
  16. title: Text('发现'),
  17. ),
  18. body: Container(
  19. color: _themeColor,
  20. child: ListView(
  21. children: <Widget>[
  22. KCDiscoverCell(
  23. imageName: 'images/朋友圈.png',
  24. title: '朋友圈',
  25. ),
  26. SizedBox(height: 10,),
  27. KCDiscoverCell(
  28. imageName: 'images/扫一扫.png',
  29. title: '扫一扫',
  30. ),
  31. ..... 这里省略一下没有必要的代码, 如果大家想查看详细代码可以移步github:
  32. github项目地址 : https://github.com/LGCooci/KCFlutter
  • 把这一排的 cell 抽取出来了 KCDiscoverCell
  • 状态管理设置 _themeColor
  • 整个页面采用 ListView 显示

② 发现页面抽取KCDiscoverCell

这种抽取共用 Cell的方式,想必你已不再迷茫,无论 iOS还是 Android 用的太多了!

  1. class KCDiscoverCell extends StatefulWidget {
  2. final String title;
  3. final String subTitle;
  4. final String imageName;
  5. final String subImageName;
  6. KCDiscoverCell({
  7. this.title,
  8. this.subTitle,
  9. this.imageName,
  10. this.subImageName
  11. });
  12. @override
  13. _KCDiscoverCellState createState() => _KCDiscoverCellState();
  14. }
  15. class _KCDiscoverCellState extends State<KCDiscoverCell> {
  16. Color _currentColor = Colors.white;
  17. @override
  18. Widget build(BuildContext context) {
  19. return GestureDetector(
  20. onTap: (){
  21. Navigator.of(context).push(
  22. MaterialPageRoute(builder: (BuildContext context) =>
  23. KCDiscoverChildPage(tittle: widget.title,)));
  24. setState(() {
  25. _currentColor = Colors.white;
  26. });
  27. },
  28. onTapDown: (TapDownDetails details){ },
  29. onTapCancel: (){},
  30. child: Container(
  31. color: _currentColor,
  32. height: 54,
  33. child: Row(
  34. // 两端排列
  35. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  36. children: [
  37. //left
  38. Container()
  39. // right
  40. Container()
  41. ]
  • 公共方法点击进入子页面 KCDiscoverChildPage
  • GestureDetector 给我们的 Cell 添加用户交互能力
  • onTapCancelonTapDownonTap 通过这几个手势设置用户点击效果
  • setState 还是我们非常熟悉的状态管理
  • Navigator.of(context).push 界面跳转

Flutter-从入门到项目 07: 微信项目-发现页面 - 图3

详情代码移步 Github 项目地址 欢迎大家点赞心心 谢谢

资料推荐

如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群1012951431来获取一份详细的大厂面试资料为你的跳槽多添一份保障。

Flutter-从入门到项目 07: 微信项目-发现页面 - 图4

更多精彩分享