import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:toolbox/core/utils.dart'; import 'package:toolbox/data/res/build_data.dart'; import 'package:toolbox/data/store/setting.dart'; import 'package:toolbox/generated/l10n.dart'; import 'package:toolbox/locator.dart'; import 'package:toolbox/view/page/home.dart'; const Set interactiveStates = { MaterialState.pressed, MaterialState.hovered, MaterialState.focused, MaterialState.selected }; class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); MaterialStateProperty getMaterialStateColor(Color primaryColor) { return MaterialStateProperty.resolveWith((states) { if (states.any(interactiveStates.contains)) { return primaryColor; } return null; }); } @override Widget build(BuildContext context) { setTransparentNavigationBar(context); return ValueListenableBuilder( valueListenable: locator().primaryColor.listenable(), builder: (_, value, __) { final primaryColor = Color(value); final textStyle = TextStyle(color: primaryColor); return MaterialApp( localizationsDelegates: const [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], supportedLocales: S.delegate.supportedLocales, title: BuildData.name, theme: ThemeData( primaryColor: primaryColor, appBarTheme: AppBarTheme(backgroundColor: primaryColor), floatingActionButtonTheme: FloatingActionButtonThemeData(backgroundColor: primaryColor), iconTheme: IconThemeData(color: primaryColor), primaryIconTheme: IconThemeData(color: primaryColor), switchTheme: SwitchThemeData( thumbColor: getMaterialStateColor(primaryColor), trackColor: getMaterialStateColor( primaryColor.withOpacity(0.7), ), ), buttonTheme: ButtonThemeData(splashColor: primaryColor), inputDecorationTheme: InputDecorationTheme( labelStyle: textStyle, focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor), ), ), radioTheme: RadioThemeData( fillColor: getMaterialStateColor(primaryColor), ), ), darkTheme: ThemeData.dark().copyWith( primaryColor: primaryColor, floatingActionButtonTheme: FloatingActionButtonThemeData(backgroundColor: primaryColor), iconTheme: IconThemeData(color: primaryColor), primaryIconTheme: IconThemeData(color: primaryColor), switchTheme: SwitchThemeData( thumbColor: getMaterialStateColor(primaryColor), trackColor: getMaterialStateColor( primaryColor.withOpacity(0.7), ), ), buttonTheme: ButtonThemeData(splashColor: primaryColor), inputDecorationTheme: InputDecorationTheme( labelStyle: textStyle, focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: primaryColor), ), ), radioTheme: RadioThemeData( fillColor: getMaterialStateColor(primaryColor), ), ), home: MyHomePage(primaryColor: primaryColor), ); }); } }