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时,子组件将正常显示和响应交互事件。


相关文章
|
2月前
|
传感器 缓存 监控
Stream 组件在 Flutter 中的应用场景有哪些?
Stream 组件在 Flutter 中的应用场景有哪些?
173 58
|
2月前
|
UED 开发者
Flutter|常用数据通信组件
Flutter|常用数据通信组件
102 49
|
15天前
Flutter 自定义组件继承与调用的高级使用方式
本文深入探讨了 Flutter 中自定义组件的高级使用方式,包括创建基本自定义组件、继承现有组件、使用 Mixins 和组合模式等。通过这些方法,您可以构建灵活、可重用且易于维护的 UI 组件,从而提升开发效率和代码质量。
111 1
|
15天前
|
开发工具 UED
Flutter&鸿蒙next中封装一个输入框组件
本文介绍了如何创建一个简单的Flutter播客应用。首先,通过`flutter create`命令创建项目;接着,在`lib`目录下封装一个自定义输入框组件`CustomInput`;然后,在主应用文件`main.dart`中使用该输入框组件,实现简单的UI布局和功能;最后,通过`flutter run`启动应用。本文还提供了后续扩展建议,如状态管理、网络请求和UI优化。
92 1
|
18天前
|
Dart UED
Flutter用户交互组件
Flutter用户交互组件
18 2
|
1月前
|
存储 开发框架 开发者
flutter:代码存储&基本组件 (五)
本文档介绍了Flutter中的一些基本组件和代码示例,包括代码存储、基本组件如AppBar的简单使用、可滑动切换的标签栏、TextField的多种用法(如简单使用、登录页面、文本控制器的监听与使用、修饰等),以及如何实现点击空白区域隐藏键盘等功能。通过这些示例,开发者可以快速掌握在Flutter应用中实现常见UI元素的方法。
|
13天前
|
开发工具
Flutter&鸿蒙next中封装一个列表组件
Flutter&鸿蒙next中封装一个列表组件
27 0
|
2月前
|
开发者
Flutter|常用数据通信组件
Flutter|常用数据通信组件
|
2月前
Stream 组件在 Flutter 中的具体使用方法是什么?
Stream 组件在 Flutter 中的具体使用方法是什么?
|
Dart Android开发
【Flutter】StatefulWidget 组件 ( 创建 StatefulWidget 组件 | MaterialApp 组件 | Scaffold 组件 )(一)
【Flutter】StatefulWidget 组件 ( 创建 StatefulWidget 组件 | MaterialApp 组件 | Scaffold 组件 )(一)
185 0
【Flutter】StatefulWidget 组件 ( 创建 StatefulWidget 组件 | MaterialApp 组件 | Scaffold 组件 )(一)