Flutter 控件之UITextView的替代方案 (iOS视角)

效果

20200423205534.jpg

最近在实现可滑动文本带指示条的一个类似UITextView的控件来做一个Dialog。网上搜了一遍暂时没有搜到替代方案,简单写了一个类似TextView文本弹窗的。有更好的方式欢迎交流学习。

Code

使用方式

///show
TicketRuleDialog(title: '规则名称', ruleText: '规则内容').showRuleDialog(context);
///dismiss
TicketRuleDialog.dismissDialog(context);

完整Dart代码

import 'package:flutter/material.dart';

class TicketRuleDialog extends Dialog{

  String title;
  String ruleText;

  TicketRuleDialog({Key key, @required this.title, @required this.ruleText});

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
        child: Material(
          type: MaterialType.transparency,
          child: Center(
              child:GestureDetector(
                onTap: (){},
                child: SizedBox(
                  width: 300,
                  height: 320,
                  child: Container(
                    decoration: _dialogDecoration(),
                    child:  Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: <Widget>[
                        _ruleTitleWidget(),
                        _ruleTextScrollView(),
                      ],
                    ),
                  ),
                ),
              )
          ),
        ),
        onTap:(){
          TicketRuleDialog.dismissDialog(context);
        }
    ) ;
  }

  Decoration _dialogDecoration () {
    return ShapeDecoration(
        color: Colors.white,
        shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(
                Radius.circular(6)
            )
        )
    );
  }

  Widget _ruleTitleWidget() {
    return Padding(
        padding: const EdgeInsets.only(top: 20.0,bottom: 10,left: 0,right: 0),
        child: Text(
          title,
          textAlign: TextAlign.center,
          style: TextStyle(fontSize: 18.0, color: Colors.black,fontWeight: FontWeight.w500),
        )
    );
  }

  Widget _ruleTextScrollView (){
    return Container(
        height: 241,
        padding: EdgeInsets.only(bottom: 10),
        child: Scrollbar(
          child: ListView(
            children: <Widget>[
              Container(
                padding: EdgeInsets.only(left: 20,right: 20),
                child: Text(
                  ruleText,
                  overflow: TextOverflow.fade,
                  textAlign: TextAlign.left,
                  style: TextStyle(fontSize: 14.0, color: Colors.black),
                ),
              ),
            ],
          ),
        )
    );
  }

  void showRuleDialog (BuildContext context){
    showDialog(
        context: context,
        builder: (context) {
          return this;
        });
  }

  static void dismissDialog(BuildContext context){
    Navigator.pop(context);
  }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关于爱情 不要认为 后面还有更好的 因为现在 拥有的就是最好的 不要因为 距离太远而放弃 爱情可以和你一起坐火车 ...
    起始新生阅读 1,486评论 0 2
  • 收藏于 2009-10-27来自于百度空间 颤巍巍的写上标题后,此刻,我已泪流满面.... 我好恨,我好悔,我好痛...
    我已不是少年郎阅读 1,387评论 0 0
  • 自娱自乐,是消解忧愁一种可靠的方法。可今天,我对自己自娱自乐表示极度反感,并十分厌恶。 今天中午,太...
    薛萌球阅读 2,833评论 0 0
  • 时隔一月回归写作,跟自己说一声加油。先完成再完美,毛病还要继续改,习惯还要继续养成。 工作了几个月之后,通过...
    慢慢的心雨阅读 2,778评论 0 1
  • 今天给朋友兰打电话,她生病了,早上在医院里才做的肠镜检查,溃疡性结肠炎,这是一种免疫力低下的慢性病。 兰得这种病,...
    冬日茉莉_阅读 3,405评论 5 13

友情链接更多精彩内容