flutter:功能性组件 (八)

简介: 本文介绍了Flutter中常用的UI组件和功能,包括进度指示器(线性和圆形)、下拉刷新、选项按钮(单选按钮、复选框、开关)、手势识别(GestureDetector、Ink和InkWell)以及提示和Offstage组件的使用方法和示例代码。这些组件和功能可以帮助开发者快速构建交互丰富的应用程序界面。

前言

在现代移动应用开发中,用户界面的设计与交互体验息息相关。Flutter作为一个高效的跨平台框架,提供了多种常用的UI组件与功能,使得开发者能够快速构建交互丰富的应用程序界面。

进度指示器

线性

Widget buildLinearProgress(){
    return Container(
      width: 300,
      height: 10,
      child: LinearProgressIndicator(
        valueColor: new AlwaysStoppedAnimation<Color>(Colors.blue),
        backgroundColor: Color(0xff00ff00),
        minHeight: 10,
      ),
    );
  }

圆形

Widget buildCircularProgress(){
    return Container(
      width: 55,
      height: 55,
      child: const CircularProgressIndicator(
        valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),
        backgroundColor: Color(0xff00ff00),
        //   圆圈的宽
        strokeWidth: 6.0,
      ),
    );
}

下拉框刷新

return Scaffold(
      appBar: AppBar(
        title: Text('下拉刷新'),
      ),
      body: RefreshIndicator(
        color: Colors.blue,
        backgroundColor: Colors.grey[200],
        onRefresh: () async {
          await Future.delayed(Duration(milliseconds: 1000));
          return Future.value(true);
        },
        child: SingleChildScrollView(
          child: Container(
            width: 300,
            height: 300,
       ),
        ),
      ),
    );


选项按钮

单选按钮Radio

class MyTest extends StatefulWidget {
  const MyTest({Key? key}) : super(key: key);
  @override
  State<MyTest> createState() => _MyTestState();
}
class _MyTestState extends State<MyTest> {
  int _groupValue=0;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("title"),
      ),
        body: Row(
          children: [
            //  给一个形参  用来记录 得到的值
            Radio(value: 0, groupValue: _groupValue, onChanged: (v){
              setState(() {
                this._groupValue=v!;
                print("you choose is boy");
              });
            }),
            Text("boy"),
            Radio(value: 1, groupValue: _groupValue, onChanged: (v){
              setState(() {
                this._groupValue=v!;
                print("you choose is girl");
              });
            }),
            Text("girl"),
          ],
        ),
    );
  }
}

RadioListTitle

复选框

bool checkIsSelect=false;
  Widget buildCheckedBox(){
    return Checkbox(
        value: checkIsSelect,
        activeColor: Colors.red,
        checkColor: Colors.yellow,
        onChanged: (value){
      setState(() {
        checkIsSelect=value!;
        print(checkIsSelect);
      });
    });
  }

加属性为

CheckboxListTitle

bool checkIsSelect=false;
  Widget buildCheckedBox(){
    return CheckboxListTile(
        value: checkIsSelect,
        activeColor: Colors.red,
        checkColor: Colors.yellow,
        title: Text("title"),
    subtitle: Text("sub title"),
        secondary: Icon(Icons.home),
        onChanged: (value){
      setState(() {
        checkIsSelect=value!;
        print(checkIsSelect);
      });
    });
  }


开关switch

bool switchValue = true;
Switch _switch() {
  return Switch(
          activeColor: Colors.red,
      value: switchValue,
      onChanged: (value) {
        switchValue = !switchValue;
        setState(() {
          print(switchValue);
        });
      });
}

用SwitchListTitle  可使用更多的属性

Switch(value: isSelected, onChanged: (value){
              setState(() {
                isSelected=value;
                print(isSelected);
              });
            })


手势识别


Widget  buildGestureDetector(){
    return GestureDetector(
      // 手指抬起来 触发
      onTap: (){
        print('hello');
      },
    child: Container(
      width: 100,
      height: 100,
      child: Image.asset(
        "imgs/laying.jpg"
      ),
    ),
    );
}

ink 和inkwell

Widget test(){
    return new Material(
      //  ink 用来处理 图片
      child:  new Ink(
        width: 300,
        height: 300,
        color: Colors.blue,
        //InkWell  用来处理 回调
        child: new InkWell(
          onTap: (){
            debugPrint("hello");
          },
          child: Container(
            width: 30,
            height: 30,
            alignment: Alignment(0,0),
            child: Text("login",style: TextStyle(color: Colors.white),),
          ),
        ),
      ),
    );
  }


提示

Widget test() {
  return Scaffold(
    body: Center(
      child: Tooltip(
        message: '这是一个提示',
        verticalOffset: 16,
        child: ElevatedButton(
          onPressed: () {
            print("hello");
          },
          child: Text("click me"),
        ),
      ),
    ),
  );
}

offstage

在Flutter中,Offstage是一个用于控制子组件是否显示的小部件。它有一个offstage属性,用于指定子组件是否应该被隐藏。
当offstage属性为true时,子组件将被隐藏,不会被渲染和响应用户交互事件。当offstage属性为false时,子组件将正常显示和响应交互事件。


相关文章
|
缓存 Dart 前端开发
Flutter 中使用 Widgetbook 管理你的组件 | 猫哥
Flutter 界面开发中我们有几个痛点 : - 与设计师协作复用一套设计规范(figma) - 可视化的管理你的组件代码(基础组件、业务组件) - 不同设备尺寸测试你的组件 - 实时修改你的测试组件参数
4252 1
Flutter 中使用 Widgetbook 管理你的组件 | 猫哥
|
5月前
|
开发者 索引 容器
Flutter开发笔记:Flutter 布局相关组件
Flutter开发笔记:Flutter 布局相关组件
232 0
|
5月前
|
开发框架
Flutter 工程化框架选择——搞定 Flutter 动画
Flutter 工程化框架选择——搞定 Flutter 动画 Flutter 是 Google 推出的跨平台移动应用开发框架,它具有快速开发、高性能、美观等优点。但是,在实际开发中,为了更好地维护和扩展代码,我们需要选择一个合适的工程化框架来协助我们进行开发。本文将介绍几种常用的 Flutter 工程化框架,并重点介绍一个搞定 Flutter 动画的方法。
|
开发框架 监控 测试技术
Flutter系列文章-Flutter在实际业务中的应用
通过这个示例,你将更深入地了解如何在实际业务中应用Flutter,以及如何运用不同的解决方案和技术来构建高效、稳定的应用。
114 1
|
缓存 API 开发者
Flutter | 常用组件(上)
Flutter | 常用组件(上)
Flutter | 常用组件(上)
|
API 数据安全/隐私保护
Flutter | 常用组件(下)
Flutter | 常用组件(下)
Flutter | 常用组件(下)
|
XML Java Android开发
Flutter(四)——基础组件
Flutter(四)——基础组件
369 0
Flutter(四)——基础组件
Flutter组件使用技巧(一)
Flutter组件使用技巧(一)
|
Dart 测试技术 API
【Flutter】大型项目里Flutter测试应用实例以及集成测试的深度使用
【Flutter】大型项目里Flutter测试应用实例以及集成测试的深度使用