Flutter对话框管理插件easy_dialogs的使用

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

Flutter对话框管理插件easy_dialogs的使用

easy_dialogs 是一个用于在Flutter应用程序中创建易于使用的对话框的插件,特别是带有列表选择功能的对话框。它提供了两种主要类型的对话框:SingleChoiceDialogSingleChoiceConfirmationDialog。下面将详细介绍如何使用这些对话框,并提供一个完整的示例demo。

1. SingleChoiceConfirmationDialog

SingleChoiceConfirmationDialog 是一种带有确认按钮的单选对话框,用户可以选择一个选项并点击“确定”或“取消”来提交或取消选择。

单选确认对话框示例1

SingleChoiceConfirmationDialog 1

SingleChoiceConfirmationDialog<String>(
    title: Text('Phone ringtone'),  // 对话框标题
    initialValue: _ringTone,        // 初始选中的值
    items: _ringTones,              // 可选项目列表
    onSelected: _onSelected,        // 选择项时的回调函数
    onSubmitted: _onSubmitted)      // 点击“确定”按钮时的回调函数

单选确认对话框示例2

SingleChoiceConfirmationDialog 2

SingleChoiceConfirmationDialog<Color>(
    title: Text('Color'),           // 对话框标题
    initialValue: _color,          // 初始选中的颜色
    items: _colors,                // 可选颜色列表
    contentPadding: EdgeInsets.symmetric(vertical: 16.0),  // 内边距
    divider: Container(            // 分割线样式
      height: 1.0,
      color: Colors.blue,
    ),
    onSubmitted: (Color color) {   // 点击“确定”按钮时的回调函数
      setState(() => _color = color);
    },
    itemBuilder: (Color color) =>  // 自定义每个选项的显示方式
        Container(height: 100.0, color: color))

2. SingleChoiceDialog

SingleChoiceDialog 是一种不带确认按钮的单选对话框,用户选择一个选项后,对话框会立即关闭。

单选对话框示例

SingleChoiceDialog

SingleChoiceDialog<Color>(
    isDividerEnabled: true,        // 是否启用分割线
    title: Text('Pick a color'),   // 对话框标题
    items: _colors,                // 可选颜色列表
    onSelected: (Color color) {    // 选择项时的回调函数
      setState(() => _color = color);
    },
    itemBuilder: (Color color) =>  // 自定义每个选项的显示方式
        Container(height: 100.0, color: color))

3. 完整示例Demo

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 easy_dialogs 插件来创建和管理对话框。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Easy Dialogs Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),  // 设置主页为HomePage
    );
  }
}

class HomePage extends StatefulWidget {
  [@override](/user/override)
  HomePageState createState() {
    return new HomePageState();
  }
}

class HomePageState extends State<HomePage> {
  // 定义铃声选项列表
  final List<String> _ringTones = [
    'None',
    'Callisto',
    'Ganymede',
    'Luna',
    'Oberon',
    'Phobos',
    'Dione',
    'Jungle Gym',
    'Ukulele',
    'Snowflakes',
  ];

  // 定义颜色选项列表
  final List<Color> _colors = [
    Colors.orange,
    Colors.pinkAccent,
    Colors.black,
    Colors.blue,
    Colors.brown,
    Colors.green,
  ];

  // 当前选中的铃声
  String _ringTone = "None";

  // 当前选中的颜色
  Color _color = Colors.black;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Settings'),  // 设置页面标题
      ),
      body: ListView(
        children: <Widget>[
          ListTile(
            onTap: _openRingtoneDialog,  // 点击时打开铃声选择对话框
            title: Text('Ringtone'),     // 选项标题
            subtitle: Text(_ringTone),   // 显示当前选中的铃声
            leading: Icon(Icons.music_note),  // 图标
          ),
          ListTile(
            onTap: _openColorDialog,  // 点击时打开颜色选择对话框(带确认)
            title: Text('Color'),     // 选项标题
            subtitle: Container(
              margin: EdgeInsets.only(top: 8.0),
              height: 20.0,
              color: _color,  // 显示当前选中的颜色
            ),
            leading: Icon(Icons.colorize),  // 图标
          ),
          ListTile(
            onTap: _openColorDialogWithoutConfirmation,  // 点击时打开颜色选择对话框(不带确认)
            title: Text('Color without confirmation'),   // 选项标题
            subtitle: Container(
              margin: EdgeInsets.only(top: 8.0),
              height: 20.0,
              color: _color,  // 显示当前选中的颜色
            ),
            leading: Icon(Icons.colorize),  // 图标
          ),
        ],
      ),
    );
  }

  // 打开铃声选择对话框
  _openRingtoneDialog() {
    showDialog(
        context: context,
        builder: (context) => SingleChoiceConfirmationDialog<String>(
            title: Text('Phone ringtone'),  // 对话框标题
            initialValue: _ringTone,        // 初始选中的铃声
            items: _ringTones,              // 可选铃声列表
            onSelected: _onSelected,        // 选择项时的回调函数
            onSubmitted: _onSubmitted));    // 点击“确定”按钮时的回调函数
  }

  // 打开颜色选择对话框(带确认)
  _openColorDialog() {
    showDialog(
      context: context,
      builder: (context) => SingleChoiceConfirmationDialog<Color>(
            title: Text('Color'),           // 对话框标题
            initialValue: _color,           // 初始选中的颜色
            items: _colors,                 // 可选颜色列表
            contentPadding: EdgeInsets.symmetric(vertical: 16.0),  // 内边距
            divider: Container(             // 分割线样式
              height: 1.0,
              color: Colors.blue,
            ),
            onSubmitted: (Color color) {    // 点击“确定”按钮时的回调函数
              setState(() => _color = color);
            },
            itemBuilder: (Color color) =>   // 自定义每个选项的显示方式
                Container(height: 100.0, color: color),
          ),
    );
  }

  // 打开颜色选择对话框(不带确认)
  _openColorDialogWithoutConfirmation() {
    showDialog(
        context: context,
        builder: (context) => SingleChoiceDialog<Color>(
              isDividerEnabled: true,       // 启用分割线
              title: Text('Pick a color'),  // 对话框标题
              items: _colors,               // 可选颜色列表
              onSelected: (Color color) {  // 选择项时的回调函数
                setState(() => _color = color);
              },
              itemBuilder: (Color color) => // 自定义每个选项的显示方式
                  Container(height: 100.0, color: color),
            ));
  }

  // 处理铃声选择
  void _onSelected(String value) {
    print('Selected $value');  // 打印选择的铃声
    setState(() {
      _ringTone = value;  // 更新当前选中的铃声
    });
  }

  // 处理铃声确认
  void _onSubmitted(String value) {
    print('Submitted $value');  // 打印确认的铃声
    setState(() {
      _ringTone = value;  // 更新当前选中的铃声
    });
  }
}

更多关于Flutter对话框管理插件easy_dialogs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter对话框管理插件easy_dialogs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用easy_dialogs插件来管理对话框的一个代码示例。easy_dialogs是一个方便管理对话框的Flutter插件,提供了多种预定义的对话框样式,简化了对话框的创建和使用过程。

首先,你需要在你的pubspec.yaml文件中添加easy_dialogs依赖:

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

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

接下来,在你的Dart文件中导入easy_dialogs

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

以下是一个简单的示例,展示了如何使用easy_dialogs来显示不同类型的对话框:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Easy Dialogs Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () => showAlertDialog(context),
                child: Text('Show Alert Dialog'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () => showConfirmationDialog(context),
                child: Text('Show Confirmation Dialog'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () => showLoadingDialog(context),
                child: Text('Show Loading Dialog'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void showAlertDialog(BuildContext context) {
    EasyDialog(
      context: context,
      dialogType: DialogType.ALERT,
      title: 'Alert Dialog',
      description: 'This is an alert dialog.',
      confirmText: 'OK',
      onConfirm: () {
        // Handle confirm button press
        print('Alert Dialog Confirmed');
      },
    ).show();
  }

  void showConfirmationDialog(BuildContext context) {
    EasyDialog(
      context: context,
      dialogType: DialogType.CONFIRMATION,
      title: 'Confirmation Dialog',
      description: 'Are you sure you want to proceed?',
      confirmText: 'Yes',
      cancelText: 'No',
      onConfirm: () {
        // Handle confirm button press
        print('Confirmation Dialog Confirmed');
      },
      onCancel: () {
        // Handle cancel button press
        print('Confirmation Dialog Cancelled');
      },
    ).show();
  }

  void showLoadingDialog(BuildContext context) {
    final loadingDialog = EasyDialog(
      context: context,
      dialogType: DialogType.LOADING,
      title: 'Loading...',
      description: 'Please wait while we process your request.',
    );

    // Show the loading dialog
    loadingDialog.show();

    // Simulate a background task (e.g., network request)
    Future.delayed(Duration(seconds: 3), () {
      // Hide the loading dialog after 3 seconds
      loadingDialog.hide();
    });
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,包含三个按钮,每个按钮分别用于显示不同类型的对话框:

  1. Alert Dialog:一个简单的提示对话框,只有一个确认按钮。
  2. Confirmation Dialog:一个确认对话框,包含确认和取消按钮。
  3. Loading Dialog:一个加载对话框,用于显示加载进度。

EasyDialog类提供了多种配置选项,如dialogTypetitledescriptionconfirmTextcancelText以及相应的回调函数onConfirmonCancel,使得创建和管理对话框变得非常简单。

希望这个示例能够帮助你理解如何在Flutter项目中使用easy_dialogs插件来管理对话框。

回到顶部