123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import 'dart:async';
- import 'dart:math' as math;
- import 'package:flutter/material.dart';
- import 'package:flutter_clock/model/config.dart';
- import 'package:intl/intl.dart';
- import 'package:flutter_clock/pages/alarm_page.dart';
- import 'package:flutter_clock/pages/clock_page.dart';
- import 'package:flutter_clock/pages/stopwatch_page.dart';
- import 'package:flutter_clock/pages/timer_page.dart';
- class MainPage extends StatefulWidget {
- @override
- State<StatefulWidget> createState() {
- return _MainPageState();
- }
- }
- class _MainPageState extends State<MainPage> with SingleTickerProviderStateMixin {
- late TabController _tabController;
- final List<Widget> _tabs = [
- Tab(child: Text('Alarm', style: TextStyle(fontSize: 16))),
- Tab(child: Text('Clock', style: TextStyle(fontSize: 16))),
- Tab(child: Text('Stopwatch', style: TextStyle(fontSize: 16))),
- Tab(child: Text('Timer', style: TextStyle(fontSize: 16))),
- ];
- final _utcMidnightRadiansOffset = radiansFromDegrees(-64);
- static const _secondsInDay = 86400;
- DateTime _localTime = DateTime.now();
- @override
- void initState() {
- super.initState();
- _tabController = TabController(length: 4, vsync: this, initialIndex: 3); // Timer tab is selected by default
- Timer.periodic(Duration(seconds: 1),
- (_) => setState(() => _localTime = DateTime.now()));
- }
- @override
- void dispose() {
- _tabController.dispose();
- super.dispose();
- }
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(
- backgroundColor: Colors.white,
- elevation: 0,
- title: TabBar(
- controller: _tabController,
- tabs: _tabs,
- labelColor: Colors.blue,
- unselectedLabelColor: Colors.black,
- indicatorColor: Colors.blue,
- indicatorWeight: 3,
- ),
- actions: [
- IconButton(
- icon: Icon(Icons.more_vert, color: Colors.black),
- onPressed: () {
- // More options menu
- },
- ),
- ],
- ),
- body: TabBarView(
- controller: _tabController,
- children: [
- AlarmPage(),
- ClockPage(),
- StopwatchPage(),
- TimerPage(),
- ],
- ),
- );
- }
- static double radiansFromDegrees(double degrees) => degrees * math.pi / 180;
- static double radiansFromTime(DateTime time) {
- final midnightToday = DateTime(time.year, time.month, time.day);
- final secondsSinceMidnight = midnightToday.difference(time).inSeconds;
- final percent = secondsSinceMidnight / _secondsInDay;
- final degrees = percent * 360;
- return radiansFromDegrees(degrees);
- }
- }
- class InnerFaceClipper extends CustomClipper<Rect> {
- final percent = 0.85;
- @override
- Rect getClip(Size size) => Rect.fromCenter(
- center: size.center(Offset(0, 0)),
- width: size.width * percent,
- height: size.height * percent,
- );
- @override
- bool shouldReclip(CustomClipper oldClipper) => true;
- }
|