• flutter common init 常用Widget初始化


    Card初始化

    Card(
            clipBehavior: Clip.antiAlias,
            color: ColorConst.Color_Font_White,
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(8),
            ),
            child:Container(),
          ),
    

    圆角解决方案

    ClipRRect
    decration
    Card

    自定义Appbar

    import 'package:flutter/material.dart';
    
    class KZAppBar {
      /// 标题widget
      final Widget title;
      /// 是否有返回功能
      final bool canBack;
      final List<Widget> actions;
    
      KZAppBar({
        this.title,
        this.canBack: true,
        this.actions,
        });
    
      PreferredSizeWidget build(context) {
        return AppBar(
          title: this.title,
          leading: this.canBack ? GestureDetector(
            onTap: () {
              Navigator.pop(context);
            },
            child: Icon(Icons.arrow_back_ios),
          ):null,
          automaticallyImplyLeading: this.canBack,
          actions: this.actions,
          centerTitle: true,
          elevation: 0.5,
        );
      }
    }
    
    //使用 
    KZAppBar(
            title: Text('我的收藏'),
          ).build(context),
    

    TextField 自定义searchBar

    //默认TextField
    TextField(
                    controller: _controller,
                    textAlign: TextAlign.center,
                    keyboardType: TextInputType.number,
                    cursorColor: ColorConst.Color_Font_Orange,
                    decoration: InputDecoration(
                      border: InputBorder.none, //隐藏下划线
                      contentPadding: EdgeInsets.only(
                          top: -SIZE_SCALE(5), bottom: SIZE_SCALE(15)),
                    ),
                    onSubmitted: (res) {
                      //点击了提交
                      print('点击了完成');
                    },
                    style: TextStyle(
                      color: ColorConst.Color_Font_Black,
                      fontSize: FONT_SCALE(16),
                    ),
                  )
    
    //iOS风格TextField
    CupertinoTextField(
                      controller: _controller,
                      decoration: BoxDecoration(
                        border: null,
                      ),
                      enabled: widget.enableEditing,
                      placeholder: widget.placeholder,
                      textInputAction: TextInputAction.search,
                      style: TextStyle(
                        color: ColorConst.Color_Font_Black,
                        fontSize: FONT_SCALE(14),
                      ),
                      onSubmitted: (text) {
                        FocusScope.of(context).unfocus();
                        if (widget.enableEditing &&
                            widget.onSearch != null &&
                            _controller.text.trim().length > 0) {
                          //开启搜索
                          widget.onSearch(_controller.text.trim());
                        }
                      },
                      // onEditingComplete: () {
                      //   print('结束编辑');
                      // },
                    )
    
    //自定义searchBar 
    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter_repairstation/utils/const.dart';
    import 'package:flutter_repairstation/utils/scale.dart';
    
    typedef SearchBarClick = Function();
    typedef SearchContentBlock = Function(String text);
    typedef SearchBarCloseBlock = Function();
    
    
    class SearchBar extends StatefulWidget {
      /// 默认文字placeholder
      final String placeholder;
    
      /// 默认文字
      final String text;
    
      /// 是否可点击搜索
      final bool enableEditing;
    
      /// 搜索框被点击了回调
      final SearchBarClick barClickBlock;
    
      /// 搜索框被点击了回调
      final SearchContentBlock onSearch;
    
      /// 点击清空
      final SearchBarCloseBlock onClose;
    
      SearchBar({
        this.text,
        this.placeholder: '搜索',
        this.enableEditing: true,
        this.barClickBlock,
        this.onSearch,
        this.onClose,
      });
    
    
      //主动创建state对象并赋值 后面可以使用这个对象赋值内部变量
      _SearchBarState myAppState = _SearchBarState();
    
      @override
      _SearchBarState createState() => myAppState;
    
       /// 外部赋值
      void setText(String text){
        //赋值
        myAppState._controller.text = text;
      }
    }
    
    class _SearchBarState extends State<SearchBar> {
      TextEditingController _controller = TextEditingController();
    
      bool _showClose = false;
    
      @override
      void dispose() {
        _controller.dispose();
        super.dispose();
      }
    
      @override
      void initState() {
        super.initState();
    
        _controller.text = widget.text;
        _controller.addListener(() {
          String text = _controller.text;
          setState(() {
            _showClose = (text.length > 0);
          });
        });
        _showClose = (_controller.text.length > 0);
      }
    
      @override
      Widget build(BuildContext context) {
        return Material(
          color: ColorConst.Color_Clear,
          child: GestureDetector(
            onTap: () {
              /// 点击回调
              if (!widget.enableEditing && widget.barClickBlock != null) {
                widget.barClickBlock();
              }
            },
            child: Container(
              height: SIZE_SCALE(36),
              child: Row(
                children: <Widget>[
                  SizedBox( 15),
                  Container(
                    child: Image.asset(
                      'assets/icon_search.png',
                      height: 17,
                       17,
                      fit: BoxFit.cover,
                    ),
                  ),
                  SizedBox(3),
                  Expanded(
                    child: CupertinoTextField(
                      controller: _controller,
                      decoration: BoxDecoration(
                        border: null,
                      ),
                      enabled: widget.enableEditing,
                      placeholder: widget.placeholder,
                      textInputAction: TextInputAction.search,
                      style: TextStyle(
                        color: ColorConst.Color_Font_Black,
                        fontSize: FONT_SCALE(14),
                      ),
                      onSubmitted: (text) {
                        FocusScope.of(context).unfocus();
                        if (widget.enableEditing &&
                            widget.onSearch != null &&
                            _controller.text.trim().length > 0) {
                          //开启搜索
                          widget.onSearch(_controller.text.trim());
                        }
                      },
                      // onEditingComplete: () {
                      //   print('结束编辑');
                      // },
                    ),
                  ),
                  SizedBox( 10),
                  _showClose
                      ? GestureDetector(
                          onTap: () {
                            //清空输入框内容 同时把事件传递出去
                            _controller.text = '';
                            if(widget.onClose != null){
                              widget.onClose();
                            }
    
                          },
                          child: Image.asset(
                            'assets/icon_close_fill.png',
                             SIZE_SCALE(15),
                            height: SIZE_SCALE(15),
                            fit: BoxFit.cover,
                          ),
                        )
                      : Container(),
                  SizedBox( 10),
                ],
              ),
              decoration: BoxDecoration(
                color: Color(0xFFF6F6F6),
                borderRadius: BorderRadius.circular(SIZE_SCALE(18)),
              ),
            ),
          ),
        );
      }
    }
    
    

    tagView支持自动换行

    import 'package:flutter/material.dart';
    import 'package:flutter_repairstation/utils/const.dart';
    import 'package:flutter_repairstation/utils/scale.dart';
    
    typedef LableClickBlock = Function(String text);
    
    class DiscountView extends StatefulWidget {
      /// 内容列表
      final List<dynamic> list;
    
      /// 内容文字上下左右间距
      EdgeInsets labelPadding;
    
      /// 文字样式
      TextStyle lableStyle;
    
      /// 背景颜色
      Color labelBackgroundColor;
    
      /// 圆角度数
      final double radius;
    
      /// lable横向间距
      final double spacing;
    
      /// lable纵向间距
      final double runSpacing;
    
      final LableClickBlock onTap;
    
      DiscountView({
        Key key,
        this.list,
        EdgeInsets labelPadding,
        TextStyle lableStyle,
        Color labelBackgroundColor,
        this.radius: 2,
        this.runSpacing: 10,
        this.spacing: 10,
        this.onTap,
      }) : super(key: key) {
        /// 初始化默认值
        this.labelPadding = labelPadding ?? EdgeInsets.fromLTRB(5, 2, 5, 2);
        this.lableStyle = lableStyle ??
            TextStyle(color: Color(0xFFF0441C), fontSize: FONT_SCALE(12));
        this.labelBackgroundColor =
            labelBackgroundColor ?? Color.fromRGBO(254, 237, 233, 1);
      }
    
      @override
      _DiscountViewState createState() => _DiscountViewState();
    }
    
    class _DiscountViewState extends State<DiscountView> {
      @override
      Widget build(BuildContext context) {
        return Material(
          child: Container(
            color: ColorConst.Color_Font_White,
            alignment: Alignment.centerLeft,
            child: Wrap(
              spacing: widget.spacing,
              runSpacing: widget.runSpacing,
              children: widget.list.map((res) {
                int i = widget.list.indexOf(res);
                return GestureDetector(
                  onTap: (){
                    if(widget.onTap != null){
                      widget.onTap(res);
                    }
                  },
                  child: Container(
                  child: Text(
                    widget.list[i],
                    style: widget.lableStyle,
                  ),
                  padding: widget.labelPadding,
                  decoration: BoxDecoration(
                    color: widget.labelBackgroundColor,
                    borderRadius: BorderRadius.circular(widget.radius),
                  ),
                ),
                );
              }).toList(),
            ),
          ),
        );
      }
    }
    
    //使用
    DiscountView(list:['满800送行李箱', '润滑油', '电瓶', '润滑油', '电瓶'])
    
  • 相关阅读:
    缓冲区溢出实验 6 exit(0)
    缓冲区溢出实验 1 strcpy
    缓冲区溢出实验 5 Snprintf
    [LeetCode] 130. Surrounded Regions 包围区域
    [LeetCode] 547. Friend Circles 朋友圈
    [LeetCode] 200. Number of Islands 岛屿的数量
    [LeetCode 695] Max Area of Island 岛的最大面积
    [LeetCode] 3. Longest Substring Without Repeating Characters 最长无重复字符的子串
    [LeetCode] 5. Longest Palindromic Substring 最长回文子串
    [LeetCode] 53. Maximum Subarray 最大子数组 --动态规划+分治
  • 原文地址:https://www.cnblogs.com/qqcc1388/p/12875448.html
Copyright © 2020-2023  润新知