Flutter自适应下拉选择插件adaptive_spinner的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter自适应下拉选择插件adaptive_spinner的使用

Adaptive Spinner

pub: 0.1.1 license: MIT style: effective dart

Adaptive Spinner 是一个圆形进度指示器,它可以随着不同平台进行缩放,并且完全用Dart编写。

使用方法

使用 AdaptiveSpinner 非常简单,只需要在需要显示进度指示器的地方调用它即可。你还可以传递一些可选参数来自定义其外观和行为:

  • withMessage: `String? 可以包含一个位于进度指示器下方的消息。
  • centeredContainer: `bool? 是否将容器居中。
  • withTextAlign: `TextAlign? 可以设置消息的对齐方式。
  • withStyle: `TextStyle? 可以设置消息的样式。
  • withSizedBox: `double? 可以指定进度指示器周围的空白区域大小。
  • withRadius: `double? 可以指定进度指示器的半径。
  • withContainer: <code>bool (默认为false)</code> 如果为trueAdaptiveSpinner将被放置在一个Container` 中,该容器可以接受以下属性:
    • alignment
    • padding
    • color
    • decoration
    • foregroundDecoration
    • width
    • height
    • margin
    • transform
    • clipBehavior

完整示例代码

import 'package:adaptive_spinner/adaptive_spinner.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'AdaptiveSpinner Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('AdaptiveSpinner Demo')),
      body: Padding(
        padding: const EdgeInsets.all(20),
        child: Center(
          child: ListView(
            children: const [
              // 基础用法
              AdaptiveSpinner(),
              Divider(),

              // 带消息且居中的用法
              AdaptiveSpinner(
                withTextAlign: TextAlign.center,
                withMessage: 'With message and text',
              ),
              Divider(),

              // 带容器的用法
              AdaptiveSpinner(
                withContainer: true,
                width: double.infinity,
                height: 100,
                withMessage:
                    'With container\nand with\nright-aligned text\n(width: double.infinity, height: 100)',
                withContainerColor: Colors.black12,
                withTextAlign: TextAlign.right,
              ),
              Divider(),

              // 带 SizedBox 的用法
              AdaptiveSpinner(
                withSizedBox: 100,
                withMessage: 'With SizedBox (size: 100)',
                withTextAlign: TextAlign.center,
              ),
              Divider(),

              // 带样式的用法
              AdaptiveSpinner(
                withStyle: TextStyle(
                  fontSize: 15,
                  fontWeight: FontWeight.bold,
                ),
                withMessage: 'With message and styled text',
                withTextAlign: TextAlign.center,
              ),
              Divider(),

              // 带半径的用法
              AdaptiveSpinner(
                withStyle: TextStyle(
                  fontSize: 15,
                  fontWeight: FontWeight.bold,
                ),
                withRadius: 20.0,
                withMessage: 'With radius (20)',
              ),
              Divider(),

              // 带颜色和快速旋转的用法
              AdaptiveSpinner(
                withContainerColor: Colors.pink,
                withSpinnerColor: Colors.greenAccent,
                withDuration: const Duration(milliseconds: 500),
                withMessage:
                    'With colored spinner and container\nand fast spinning (Duration: 500ms)',
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter自适应下拉选择插件adaptive_spinner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自适应下拉选择插件adaptive_spinner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用adaptive_spinner插件来实现自适应下拉选择的代码示例。

首先,确保你已经在pubspec.yaml文件中添加了adaptive_spinner依赖:

dependencies:
  flutter:
    sdk: flutter
  adaptive_spinner: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用adaptive_spinner

代码示例

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:adaptive_spinner/adaptive_spinner.dart';
  1. 定义下拉选项的数据
List<String> items = [
  'Option 1',
  'Option 2',
  'Option 3',
  'Option 4',
];
  1. 创建主页面并添加自适应下拉选择组件
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Adaptive Spinner Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? selectedItem;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Adaptive Spinner Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            AdaptiveSpinner<String>(
              items: items,
              onItemSelected: (item) {
                setState(() {
                  selectedItem = item;
                });
              },
              initialSelection: selectedItem,
              dropdownDecoration: BoxDecoration(
                borderRadius: BorderRadius.circular(10),
                color: Colors.white,
                border: Border.all(color: Colors.grey[400]!),
              ),
              dropdownTextStyle: TextStyle(color: Colors.black),
              dropdownIcon: Icon(Icons.arrow_drop_down),
              hint: Text('Select an option'),
              searchDecoration: InputDecoration(
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(10),
                ),
                prefixIcon: Icon(Icons.search),
                hintText: 'Search options...',
              ),
            ),
            SizedBox(height: 20),
            Text(
              'Selected Item: $selectedItem',
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  • AdaptiveSpinner<String>:泛型参数指定了下拉列表项的数据类型,这里是String
  • items:下拉列表中的选项。
  • onItemSelected:当用户选择一个选项时调用的回调函数,用于更新选中的项。
  • initialSelection:初始选中的项,这里使用了selectedItem变量。
  • dropdownDecoration:下拉列表的装饰,这里设置了边框半径、颜色和边框。
  • dropdownTextStyle:下拉列表项的文字样式。
  • dropdownIcon:下拉箭头图标。
  • hint:当没有选中项时显示的提示文本。
  • searchDecoration:搜索输入框的装饰,包括边框、前缀图标和提示文本。

这个示例展示了如何使用adaptive_spinner插件创建一个自适应的下拉选择组件,并且当用户选择一个选项时,会在页面上显示选中的项。

回到顶部