dynamic_polls 0.0.5+1 copy "dynamic_polls: ^0.0.5+1" to clipboard
dynamic_polls: ^0.0.5+1 copied to clipboard

A Customizable Polls for Flutter. Simple, easy to use and highly customizable.

CustomPoll Package #

This package provides a customizable and dynamic poll widget for Flutter applications. It allows you to create polls with various options, styles, and behaviors, making it easy to integrate polls into your app.

Features #

Customizable Poll Widget: Create polls with customizable titles, options, and styles.

Dynamic Voting: Users can vote and see real-time updates.

Reselection Option: Allow or disallow users to change their votes.

Timer Support: Display a countdown timer for the poll duration.

Private Polls: Create private polls that only specific users can vote on.

Stream Integration: Integrate with a stream to handle vote updates and send data to a server.

  • DynamicPoll

custompoll

DynamicPoll(
                    title: 'کدام زبان برنامه‌نویسی محبوب‌تر است؟',
                    private: false,
                    allowReselection: false,
                    showPercentages: false,
                    showTimer: false,
                    options: const [
                      'فلاتر',
                      'جاوااسکریپت',
                      'پایتون',
                      'سی‌شارپ',
                    ],
                    totalVotes: 0,
                    startDate: DateTime.now().add(const Duration(seconds: 5)),
                    endDate: DateTime.now().add(const Duration(seconds: 10)),
                    maximumOptions: 20,
                    backgroundDecoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(12.0),
                      color: Colors.grey.shade100,
                    ),
                    heightBetweenTitleAndOptions: 20,
                    votesText: 'رای‌ها',
                    createdBy: 'نام خلق کننده',
                    userToVote: 'نام کاربر',
                    loadingWidget: const CircularProgressIndicator(),
                    voteStream: StreamController<VoteData>(),
                    allStyle: Styles(
                      titleStyle: TitleStyle(
                        alignment: Alignment.center,
                        maxLines: 2,
                        minLines: 1,
                        textAlign: TextAlign.center,
                        textDirection: TextDirection.rtl,
                        style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                      ),
                      optionStyle: OptionStyle(
                        borderRadius: BorderRadius.circular(12),
                        selectedBorderColor: Colors.blue,
                        unselectedBorderColor: Colors.grey,
                        borderWidth: 2.0,
                        fillColor: Colors.white,
                        votedCheckmark: const Icon(Icons.check, color: Colors.green),
                        textSelectColor: Colors.blue,
                        otherTextPercentColor: Colors.black,
                        leadingVotedProgessColor: Colors.blue,
                        opacityLeadingVotedProgessColor: 0.5,
                        votedBackgroundColor: Colors.blue,
                        voteBorderProgressColor: Colors.blue,
                        progressBorderWidth: 1.0,
                      ),
                      votesTextStyle: VotesTextStyle(
                        alignment: Alignment.center,
                        paddingTop: 10,
                        paddingBottom: 10,
                        style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
                      ),
                      dateStyle: DateStyle(
                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                        textStart: 'شروع شده در: ',
                        textStyle: const TextStyle(fontWeight: FontWeight.bold, color: Colors.black),
                      ),
                    ),
                    onOptionSelected: (index) {
                      print('رای داده شد به گزینه $index');
                    },
                  ),
                 
copied to clipboard
                  DynamicPoll(
                    private: false,
                    allowReselection: true,
                    showPercentages: false,
                    showTimer: true,
                    allStyle: Styles(
                      titleStyle: TitleStyle(textDirection: TextDirection.ltr, alignment: Alignment.centerLeft),
                      optionStyle: OptionStyle(
                        unselectedBorderColor: Colors.teal,
                        votedBackgroundColor: Colors.blue.withOpacity(0.5),
                        borderRadius: BorderRadius.circular(8),
                        borderColor: Colors.purple,
                        leadingVotedProgessColor: Colors.purple,
                        height: 45,
                        voteBorderProgressColor: Colors.purple,
                        fillColor: Colors.white,
                      ),
                    ),
                    title: 'What is your favorite color?  ef ewf wewerwetwerwrweret  t t wtwetrw t  4twtrw4 ttttetertt   4tetree t ertert et ert e 543eter te t ert ter te4 t rret54e te tre te  ert 4 3tertert',
                    options: const ['Reddfdfd', 'Bluefdfdfd', 'Greendfdfdfd sd sad sadadsadadsadsa s adas wdwdawd aw', 'Yellowfdfdfd'],
                    startDate: DateTime.now().add(const Duration(seconds: 7)),
                    endDate: DateTime.now().add(const Duration(minutes: 4)),
                    onOptionSelected: (int selectedOption) {
                      if (kDebugMode) {
                        print('Selected option: $selectedOption');
                      }
                    },
                  ),
copied to clipboard
  • DynamicPoll.polls

polls

DynamicPoll.polls(
        title: 'How old are you?',
       options: ['18-25', '26-30', '31-35', '36-40', '41-45', '46-50', '51-55', '56-60', '61-65', '66-70'],
     onOptionSelected: (int index) {},
   allowReselection: false,
  ),
copied to clipboard
  • DynamicPoll.radioBottomPolls

radioBottomPolls

CustomPoll.radioBottomPolls(
               title: 'How old are you?',
          options: const ['18-25', '26-30', '31-35', '36-40', '41-45', '46-50', '51-55', '56-60', '61-65', '66-70'],
        onOptionSelected: (int index) {},
     allowReselection: true,
  ),
copied to clipboard
  • DynamicPoll.viewOnlyPollWidget

onlyPolls

   Padding(
                    padding: const EdgeInsets.all(16.0),
                    child: CustomPoll.viewOnlyPollWidget(
                      title: title,
                      options: options,
                      votes: votes,
                      totalVotes: totalVotes,
                      startDate: startDate,
                      endDate: endDate,
                      showPercentages: true,
                      votesText: "آرا",
                      heightBetweenTitleAndOptions: 12,
                      heightBetweenOptions: 16,
                      pollOptionsHeight: 50,
                      pollOptionsWidth: double.infinity,
                      pollOptionsBorderRadius: BorderRadius.circular(12),
                      pollOptionsFillColor: Colors.white,
                      pollOptionsSplashColor: Colors.grey[300]!,
                      votedProgressColor: Colors.blue,
                      leadingVotedProgessColor: Colors.blueAccent,
                      votedBackgroundColor: const Color(0xffEEF0EB),
                      votedPercentageTextStyle: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
                      votesTextStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
                    ),
                  ),
copied to clipboard

Getting Started #

To use this package, add custom_poll as a dependency in your pubspec.yaml file.

dependencies:
  custom_poll: ^0.0.5+1
copied to clipboard

Then, import the package in your Dart code:

import 'package:custom_poll/custom_poll.dart';
copied to clipboard
  • Usage Here is a basic example of how to use the CustomPoll widget in your Flutter app:
class MyPage extends StatefulWidget {
  @override
  State<MyPage> createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  final voteStreamController = StreamController<VoteData>.broadcast();
  final voteNotifier = ValueNotifier<VoteData>(
  VoteData(
    totalVotes: 0, 
    optionVotes: {}, 
    percentages: {},
  )
);



  @override
  void initState() {
    super.initState();
    voteStreamController.stream.listen((voteData) {
      // Send vote data to the server
      _sendToServer(voteData);
    });
  }

  @override
  Widget build(BuildContext context) {
     voteNotifier.addListener(() {
      final voteData = voteNotifier.value;
      print('all votes: ${voteData.totalVotes}');
      print('votes for each option: ${voteData.optionVotes}');
      print('percentages for each option: ${voteData.percentages}');
    });
    return Scaffold(
      body: CustomPoll(
        title: 'What is your favorite color?',
        options: ['Red', 'Blue', 'Green', 'Yellow'],
        startDate: DateTime.now(),
        endDate: DateTime.now().add(Duration(hours: 24)),
        onOptionSelected: (index) {
          print('Selected option: $index');
        },
        voteStream: voteStreamController,
         voteNotifier: voteNotifier,
        // Other parameters
      ),
    );
  }

  // یا با ValueListenableBuilder
ValueListenableBuilder<VoteData>(
  valueListenable: voteNotifier,
  builder: (context, voteData, child) {
    return Column(
      children: [
        Text('all votes: ${voteData.totalVotes}'),
   
      ],
    );
  },
)

  @override
  void dispose() {
    voteStreamController.dispose();
    super.dispose();
  }

  Future<void> _sendToServer(VoteData voteData) async {
    try {
      final response = await http.post(
        Uri.parse('YOUR_API_ENDPOINT'),
        headers: {'Content-Type': 'application/json'},
        body: jsonEncode(voteData.toJson()),
      );

      if (response.statusCode == 200) {
        print('Vote data sent successfully');
      } else {
        print('Failed to send vote data');
      }
    } catch (e) {
      print('Error sending vote data: $e');
    }
  }
}
copied to clipboard

Example Parameters #

  • -title: The title of the poll.

  • -options: A list of options for the poll.

  • -startDate: The start date of the poll.

  • -endDate: The end date of the poll.

  • -onOptionSelected: A callback function that is called when an option is selected.

  • -voteStream: A stream controller for handling vote updates.

Additional Parameters #

  • -allowReselection: Whether users can reselect an option after voting.

  • -showPercentages: Whether to display the percentage of votes for each option.

  • -backgroundDecoration: The decoration applied to the background of the poll.

  • -heightBetweenTitleAndOptions: The height between the title and the options.

  • -votesText: The text displayed next to the vote count.

  • -createdBy: The name of the user who created the poll.

  • -userToVote: The name of the user who is allowed to vote.

  • -private: Whether the poll is private.

  • -loadingWidget: The widget to display while the poll is loading.

  • -allStyle: The styles to apply to the poll.

  • -maximumOptions: The maximum number of options allowed in the poll.

  • -height: The height of the poll widget.

  • -width: The width of the poll widget.

  • -showTimer: Whether to show a timer for the poll duration.

1
likes
160
points
10
downloads

Publisher

verified publisherswanflutterdev.com

Weekly Downloads

2024.10.02 - 2025.04.16

A Customizable Polls for Flutter. Simple, easy to use and highly customizable.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

flutter, intl

More

Packages that depend on dynamic_polls