前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter 自定义SegmentControl

Flutter 自定义SegmentControl

作者头像
赵哥窟
发布2021-04-16 12:06:20
7600
发布2021-04-16 12:06:20
举报
文章被收录于专栏:日常技术分享日常技术分享

Screenshot_1618383789.png

如图分段控件,只提供一个思路,想要什么式样自己修改即可,那些Base相关的就是基础控件封装了难得写代码。所以替换就可以了。

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:toofoo/common/base_component/base_image.dart';
import 'package:toofoo/common/base_component/base_text.dart';
import 'package:toofoo/common/color/colorsUtil.dart';
import 'package:toofoo/common/screenAdaper/ScreenAdaper.dart';

typedef OnChange = void Function(int index);

class SegmentedControl extends StatefulWidget {
  SegmentedControl({Key key, this.onChange,
  this.titleList});

  final OnChange onChange;
  final List<String> titleList ;

  @override
  SegmentedControlState createState() => SegmentedControlState();
}

class SegmentedControlState extends State<SegmentedControl> {

  int index ;

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

    index = 0;
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 44,
      child: _segmentedWidget(),
    );
  }

  Widget _segmentedWidget(){
    return Stack(
      children: [
        _segmentedTitleWidget(),
        _indicatorWidget(),
      ],
    );
  }

  Widget _segmentedTitleWidget(){
    return Container(
      child: Row(
        children: _getTitleWidget(),
      ),
    );
  }

  List<Widget> _getTitleWidget(){
    List<Widget> list = [];
    for(int i = 0; i < widget.titleList.length;i++){
      Expanded title = Expanded(
        child: TextButton(
          onPressed: (){
            setState(() {
              index = i;
              if(widget.onChange != null){
                widget.onChange(i);
              }
            });
          },
          child: Container(
            alignment: Alignment.center,
            child: BaseText.baseText(widget.titleList[i], 18, i==index?'111E36':'6A7182',fontWeight: i==index?FontWeight.bold:null),
          ),
        ),
      );
      list.add(title);
    }
    return list;
  }
  
  Widget _indicatorWidget(){
     double indicatorWidth =  ScreenAdaper.screenWidth()/widget.titleList.length;
    return Container(
      margin: EdgeInsets.only(left: index*indicatorWidth+indicatorWidth/2-5,top: 34),
      child: BaseImage.getBaseImage('common/search_segment.png'),
    );
  }




}

使用

代码语言:javascript
复制
SegmentedControl(
          titleList: ['歌单','歌曲','筛选'],
          onChange: (int index){

          },
 ),
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档