Untitled

 avatar
user_2717664
plain_text
a year ago
7.2 kB
11
Indexable
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:table_calendar/table_calendar.dart';

class MyCalendar extends StatefulWidget {
  @override
  _MyCalendarState createState() => _MyCalendarState();
}

class _MyCalendarState extends State<MyCalendar> {
  DateTime _focusedDay = DateTime.now();
  DateTime? _selectedDay;
  bool isVisible = false;
  var samp;

  void _onDaySelected(DateTime selectedDay, DateTime focusedDay) {
    setState(() {
      _selectedDay = selectedDay;
      _focusedDay = focusedDay;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: const Text('TableCalendar Example'),
      ),
      body: Column(
        children: [
          ElevatedButton(
              onPressed: () {
                setState(() {
                  isVisible = !isVisible;
                });
              },
              child: const Text("hi")),
          Padding(
            padding: const EdgeInsets.symmetric(horizontal: 50),
            child: Visibility(
              visible: true,
              child: TableCalendar(
                onHeaderTapped: (focusedDay) {},
                pageJumpingEnabled: true,
                daysOfWeekStyle: const DaysOfWeekStyle(
                    weekdayStyle: TextStyle(color: Colors.grey),
                    weekendStyle: TextStyle(
                      color: Colors.grey,
                    )),
                rowHeight: 40,
                availableGestures: AvailableGestures.all,
                calendarStyle: CalendarStyle(
                  markerDecoration: BoxDecoration(shape: BoxShape.rectangle),
                  selectedDecoration: BoxDecoration(
                    color: Colors.black,
                    shape: BoxShape.circle,
                  ),
                  todayDecoration: BoxDecoration(
                    color: Colors.grey,
                    shape: BoxShape.circle,
                  ),
                ),
                selectedDayPredicate: (day) => isSameDay(day, _selectedDay),
                onDaySelected: _onDaySelected,
                headerStyle: const HeaderStyle(
                  titleTextStyle: TextStyle(color: Colors.amber),
                  formatButtonVisible: false,
                  titleCentered: true,
                ),
                firstDay: DateTime.utc(2010, 10, 16),
                lastDay: DateTime.utc(2030, 3, 14),
                focusedDay: _focusedDay,
              ),
            ),
          ),
          ///////////////////////////////////////////
          CustomSwitch(
              value: isVisible,
              onChanged: (s) {
                setState(() {
                  isVisible = !isVisible;
                });
              }),
          ////////////////////////////////////////////
          InputDropdown(
            items: [],
            // value: samp,
            onChanged: (s) {},
          )
        ],
      ),
    );
  }
}

void main() => runApp(MaterialApp(
      home: MyCalendar(),
    ));

class CustomSwitch extends StatefulWidget {
  final bool value;
  final ValueChanged<bool> onChanged;

  CustomSwitch({Key? key, required this.value, required this.onChanged})
      : super(key: key);

  @override
  _CustomSwitchState createState() => _CustomSwitchState();
}

class _CustomSwitchState extends State<CustomSwitch>
    with SingleTickerProviderStateMixin {
  late AnimationController _animationController;
  late Animation<Alignment> _circleAnimation;
  bool isFirstCircleVisible = false;

  @override
  void initState() {
    super.initState();
    _animationController = AnimationController(
      vsync: this,
      duration: Duration(milliseconds: 200),
    );
    _circleAnimation = AlignmentTween(
      begin: widget.value ? Alignment.centerRight : Alignment.centerLeft,
      end: widget.value ? Alignment.centerLeft : Alignment.centerRight,
    ).animate(CurvedAnimation(
      parent: _animationController,
      curve: Curves.easeInOut,
    ));
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        if (_animationController.isCompleted) {
          _animationController.reverse();
        } else {
          _animationController.forward();
        }
        widget.onChanged(!widget.value);
        setState(() {
          isFirstCircleVisible = !isFirstCircleVisible;
        });
      },
      child: Container(
        width: 80.0,
        height: 40.0,
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(30),
          color: Colors.transparent,
        ),
        child: Stack(
          children: [
            Center(
              child: Container(
                height: 30.0,
                width: 80.0,
                decoration: BoxDecoration(
                  color: Color(0xffF1F1F1),
                  borderRadius: BorderRadius.circular(30),
                ),
              ),
            ),
            AnimatedBuilder(
              animation: _animationController,
              builder: (context, child) {
                return Align(
                  alignment: _circleAnimation.value,
                  child: Container(
                    width: 40.0,
                    height: 40.0,
                    decoration: BoxDecoration(
                      color: Colors.white,
                      border: Border.all(color: Color(0xffF1F1F1)),
                      shape: BoxShape.circle,
                    ),
                  ),
                );
              },
            ),
          ],
        ),
      ),
    );
  }

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

//////

class InputDropdown extends StatelessWidget {
  // final String? value;
  final ValueChanged<String?>? onChanged;
  final List<DropdownMenuItem<String>> items;

  const InputDropdown({
    Key? key,
    // required this.value,
    required this.onChanged,
    required this.items,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return InputDecorator(
      decoration: InputDecoration(
        border: InputBorder.none,
        //  OutlineInputBorder(
        //   borderRadius: BorderRadius.circular(10),
        //   // borderSide: BorderSide(
        //   //     color: Colors.transparent), // Changed outline color to red
        // ),
        contentPadding: const EdgeInsets.symmetric(horizontal: 12.0),
        suffixIcon: Icon(Icons.keyboard_arrow_down_outlined,
            color: Colors
                .black // Fallback to Colors.grey if colors(context).text is null
            ),
      ),
      child: Container(
        decoration: BoxDecoration(
            borderRadius: BorderRadius.all(Radius.circular(8)),
            border: Border.all(color: Colors.amber)),
        child: DropdownButtonHideUnderline(
          child: DropdownButton<String>(
            // value: value,
            onChanged: onChanged,
            items: items,
            icon: null, // No icon displayed
          ),
        ),
      ),
    );
  }
}
Editor is loading...
Leave a Comment