Flutter选择题单选插件mcq_radio的使用

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

Flutter选择题单选插件mcq_radio的使用

MCQRadio

MCQRadio 是一个 Flutter 包,它提供了一个可自定义的单选按钮组件,用于多选题(MCQs),基于 Flutter 的 Radio 组件。它允许开发者创建一个带有字母中心的单选按钮,并可以自定义按钮及其文本的颜色、大小和样式。

特性

  • 创建一个带有字母中心的单选按钮
  • 自定义按钮及其文本的颜色、大小和样式
  • 支持深色和浅色主题
  • 与 Flutter 的 Material Design 无缝集成

开始使用

要使用 MCQRadio,首先需要将其添加到你的依赖项中:

pubspec.yaml 文件中添加以下内容:

dependencies:
  mcq_radio: ^1.0.0

然后在终端中运行 flutter pub get 来下载并安装包。

在 Dart 代码中导入包:

import 'package:mcq_radio/mcq_radio.dart';

使用方法

使用 MCQRadio 组件来创建单选按钮。以下是一个示例:

const one = "ক";
const two = "খ";
const three = "গ";
const four = "ঘ";
const five = "ঙ";
const unanswered = "";

enum OptionTitles { one, two, three, four, five, unanswered }

OptionTitles _optionTitle = OptionTitles.unanswered;

MCQRadio<OptionTitles>(
    fillColor: MaterialStateColor.resolveWith(
        (states) => Colors.black), // 单选按钮的颜色
    value: OptionTitles.one, // 单选按钮的值 (枚举) 例如 ক, খ, গ, ঘ, ঙ 等
    groupValue: _optionTitle, // 当前选中的单选按钮的值
    mcqOptionAlphabetStyle: const TextStyle(
        fontSize: 20,
        fontFamily: "SolaimanLipi",
        color: Colors.black, // 单选按钮字母的颜色
    ), // 单选按钮文本的样式
    circleRadius: 20, // 单选按钮的半径
    mcqOptionAlphabet: one,
    onChanged: (OptionTitles? value) {
        setState(() {
        _optionTitle = value!;
        });
    },
);

示例代码

以下是完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  static const String _title = 'MCQ Radio buttons Example';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primaryColor: Colors.black,
        colorScheme: ColorScheme.fromSwatch().copyWith(secondary: Colors.black),
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text(_title),
          backgroundColor: Colors.amber[900],
        ),
        body: const Center(
          child: MyStatefulWidget(),
        ),
      ),
    );
  }
}

const one = "ক";
const two = "খ";
const three = "গ";
const four = "ঘ";
const five = "ঙ";
const unanswered = "";

enum OptionTitles { one, two, three, four, five, unanswered }

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

  [@override](/user/override)
  State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  OptionTitles _optionTitle = OptionTitles.unanswered;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        const Padding(
          padding: EdgeInsets.all(8.0),
          child: Text(
            "1. Which one is the capital of Bangladesh?",
            style: TextStyle(
              fontSize: 20,
              fontWeight: FontWeight.bold,
              fontFamily: "SolaimanLipi",
            ),
          ),
        ),
        MCQRadio<OptionTitles>(
          fillColor: MaterialStateColor.resolveWith(
              (states) => Colors.black), // 单选按钮的颜色
          value: OptionTitles.one, // 单选按钮的值 (枚举) 例如 ক, খ, গ, ঘ, ঙ 等
          groupValue: _optionTitle, // 当前选中的单选按钮的值
          mcqOptionAlphabetStyle: const TextStyle(
            fontSize: 20,
            fontFamily: "SolaimanLipi",
            color: Colors.black, // 单选按钮字母的颜色
          ), // 单选按钮文本的样式
          circleRadius: 20, // 单选按钮的半径
          mcqOptionAlphabet: one,
          onChanged: (OptionTitles? value) {
            setState(() {
              _optionTitle = value!;
            });
          },
        ),
        MCQRadio<OptionTitles>(
          fillColor: MaterialStateColor.resolveWith((states) => Colors.black),
          value: OptionTitles.two,
          groupValue: _optionTitle,
          mcqOptionAlphabet: two,
          onChanged: (OptionTitles? value) {
            setState(() {
              _optionTitle = value!;
            });
          },
        ),
        MCQRadio<OptionTitles>(
          fillColor: MaterialStateColor.resolveWith((states) => Colors.black),
          value: OptionTitles.three,
          groupValue: _optionTitle,
          mcqOptionAlphabet: three,
          onChanged: (OptionTitles? value) {
            setState(() {
              _optionTitle = value!;
            });
          },
        ),
        MCQRadio<OptionTitles>(
          fillColor: MaterialStateColor.resolveWith((states) => Colors.black),
          value: OptionTitles.four,
          groupValue: _optionTitle,
          mcqOptionAlphabet: four,
          onChanged: (OptionTitles? value) {
            setState(() {
              _optionTitle = value!;
            });
          },
        ),
        MCQRadio<OptionTitles>(
          fillColor: MaterialStateColor.resolveWith((states) => Colors.black),
          value: OptionTitles.five,
          groupValue: _optionTitle,
          mcqOptionAlphabet: five,
          onChanged: (OptionTitles? value) {
            print(value);
            setState(() {
              _optionTitle = value!;
            });
          },
        ),
      ],
    );
  }
}

更多关于Flutter选择题单选插件mcq_radio的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter选择题单选插件mcq_radio的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


mcq_radio 是一个用于在 Flutter 应用中创建单选题(Multiple Choice Questions, MCQ)的插件。它允许开发者轻松地在应用中添加单选题,并获取用户的选择。以下是如何使用 mcq_radio 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  mcq_radio: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 mcq_radio 插件:

import 'package:mcq_radio/mcq_radio.dart';

3. 创建单选题

使用 McqRadio 组件来创建单选题。你可以通过 options 属性来定义选项,并通过 onChanged 回调来获取用户的选择。

class MyMcqRadio extends StatefulWidget {
  @override
  _MyMcqRadioState createState() => _MyMcqRadioState();
}

class _MyMcqRadioState extends State<MyMcqRadio> {
  String? selectedOption;

  final List<String> options = [
    'Option 1',
    'Option 2',
    'Option 3',
    'Option 4',
  ];

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        McqRadio(
          options: options,
          selectedOption: selectedOption,
          onChanged: (String? value) {
            setState(() {
              selectedOption = value;
            });
          },
        ),
        SizedBox(height: 20),
        Text('Selected Option: ${selectedOption ?? 'None'}'),
      ],
    );
  }
}

4. 使用 McqRadio 组件

现在你可以在你的应用中使用 MyMcqRadio 组件:

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(
        title: Text('MCQ Radio Example'),
      ),
      body: Center(
        child: MyMcqRadio(),
      ),
    ),
  ));
}

5. 自定义样式

mcq_radio 插件允许你自定义选项的样式,例如按钮的颜色、文本样式等。你可以通过 McqRadio 的其他属性来实现这些自定义。

McqRadio(
  options: options,
  selectedOption: selectedOption,
  onChanged: (String? value) {
    setState(() {
      selectedOption = value;
    });
  },
  activeColor: Colors.blue,
  inactiveColor: Colors.grey,
  textStyle: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),

6. 处理用户选择

用户选择某个选项后,onChanged 回调会被触发,你可以在回调中处理用户的选择逻辑。

onChanged: (String? value) {
  setState(() {
    selectedOption = value;
  });
  print('User selected: $value');
},
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!