Flutter版本玩Android客户端——知识体系tab点击跳转

Posted xingfeng_coder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter版本玩Android客户端——知识体系tab点击跳转相关的知识,希望对你有一定的参考价值。

Flutter版本玩Android(3)——文章详情页中完成了用webview加载文章详情页,本文趁热打铁,完成知识体系tab的跳转逻辑。

和以往一样,先看效果:

体系小item的跳转

文章列表Widget的封装

小item的跳转到一个文章列表,由于发现文章列表和首页可以公用,因此将其抽离出来,完成封装,如下:

class ArticleListWidget extends StatelessWidget 
  final List<ArticleItem> _articleList;

  ArticleListWidget(this._articleList);

  @override
  Widget build(BuildContext context) 
    return SliverList(
        delegate: SliverChildBuilderDelegate((ctx, index) 
      return _creatArticleItem(_articleList[index], context);
    , childCount: _articleList.length));
  

  Widget _creatArticleItem(ArticleItem articleItem, BuildContext context) 
    return SizedBox(
      height: 190.0,
      child: Card(
        child: FlatButton(
            onPressed: () 
              Navigator.of(context).pushNamed(RouteTableConst.ARTICLE_PAGE,
                  arguments: 
                    'url': articleItem.link,
                    'title': articleItem.title
                  );
            ,
            child: Column(
              children: <Widget>[
                ListTile(
                  leading: Text(articleItem.author),
                  trailing: Text(articleItem.niceDate),
                ),
                ListTile(
                  title: Text(
                    articleItem.title,
                    style: TextStyle(color: Colors.black87, fontSize: 20),
                    maxLines: 2,
                    overflow: TextOverflow.ellipsis,
                  ),
                ),
                ListTile(
                  leading: ActionChip(
                    label: Text(
                      articleItem.chapterName,
                      style: TextStyle(color: Colors.blue),
                    ),
                    onPressed: () 
                      //TODO 跳转到chapter name
                    ,
                  ),
                  trailing: IconButton(
                    icon: Icon(
                      Icons.favorite,
                      color: articleItem.collect ? Colors.red : Colors.black45,
                    ),
                    onPressed: () ,
                  ),
                ),
              ],
            )),
      ),
    );
  

将首页和知识体系item分别使用该Widget。

知识体系总的跳转

这部分页面有tab+知识体系item widget组成。
代码如下:

class KnowledgeTabWidget extends StatefulWidget 
  @override
  _KnowledgeTabWidgetState createState() => _KnowledgeTabWidgetState();


class _KnowledgeTabWidgetState extends State<KnowledgeTabWidget>
    with TickerProviderStateMixin 
  TabController _tabController;

  KnowledgeCategory _knowledgeCategory;

  List<Tab> _tabs;
  List<Widget> _children;

  @override
  void initState() 
    super.initState();

  

  @override
  void didChangeDependencies() 
    super.didChangeDependencies();
    _knowledgeCategory =
    ModalRoute.of(context).settings.arguments as KnowledgeCategory;

    _tabs=List(_knowledgeCategory.children.length);
    _children=List(_knowledgeCategory.children.length);

    for (int i = 0; i < _knowledgeCategory.children.length; i++) 
      _tabs[i] = Tab(
        child: Text(_knowledgeCategory.children[i].name),
      );
      _children[i] = KnowledgeItemWidget(_knowledgeCategory.children[i],
      );
    
    _tabController = TabController(length: _tabs.length, vsync: this);
  


  @override
  void dispose() 
    _tabController.dispose();
    super.dispose();
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text(_knowledgeCategory.name),
        bottom: TabBar(
          tabs: _tabs,
          controller: _tabController,
          isScrollable: true,
        ),
        leading: IconButton(icon: Icon(Icons.arrow_back), onPressed: ()
          Navigator.of(context).pop();
        ),
      ),
      body: TabBarView(
        children: _children,
        controller: _tabController,
      ),
    );
  

可以发现,这种widget的组合确实很easy。

一点感悟:flutter的widget是有state的,可以绑定对象,而ui的编写很多就是组合widget,很简单。

关于代码,可以参考:
https://github.com/wangli135/wan_android/tree/1ba07ff31c163f8d3ad1f24315c9f902fc29116d

关注我的技术公众号,不定期会有技术文章推送,不敢说优质,但至少是我自己的学习心得。微信扫一扫下方二维码即可关注:

以上是关于Flutter版本玩Android客户端——知识体系tab点击跳转的主要内容,如果未能解决你的问题,请参考以下文章

Flutter版本玩Android客户端——微信公众号tab点击跳转

Flutter版本玩Android客户端——微信公众号tab点击跳转

Flutter版本玩Android客户端——状态管理

Flutter版本玩Android客户端——状态管理

Flutter版本玩Android客户端——搭建主页面

Flutter版本玩Android客户端——搭建主页面