theme_page.dart 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import 'package:flustars/flustars.dart' as flutter_stars;
  2. import 'package:flutter/cupertino.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:liftmanager/common/common.dart';
  5. import 'package:liftmanager/common/themes.dart';
  6. import 'package:liftmanager/provider/theme_provider.dart';
  7. import 'package:liftmanager/utils/theme_utils.dart';
  8. import 'package:liftmanager/widgets/app_bar.dart';
  9. import 'package:provider/provider.dart';
  10. class ThemePage extends StatefulWidget {
  11. @override
  12. _ThemePageState createState() => _ThemePageState();
  13. }
  14. class _ThemePageState extends State<ThemePage> {
  15. var _list = ["跟随系统", "开启", "关闭"];
  16. @override
  17. void initState() {
  18. super.initState();
  19. WidgetsBinding.instance.addPostFrameCallback((_) async {
  20. await flutter_stars.SpUtil.getInstance();
  21. });
  22. }
  23. @override
  24. Widget build(BuildContext context) {
  25. String theme = flutter_stars.SpUtil.getString(Constant.theme);
  26. String themeMode;
  27. switch(theme){
  28. case "Dark":
  29. themeMode = _list[1];
  30. break;
  31. case "Light":
  32. themeMode = _list[2];
  33. break;
  34. default:
  35. themeMode = _list[0];
  36. break;
  37. }
  38. return Scaffold(
  39. appBar: const MyAppBar(
  40. centerTitle: "夜间模式",
  41. ),
  42. body: ListView.separated(
  43. shrinkWrap: true,
  44. itemCount: _list.length,
  45. separatorBuilder: (_, index) {
  46. return const Divider();
  47. },
  48. itemBuilder: (_, index){
  49. return InkWell(
  50. onTap: () => Provider.of<ThemeProvider>(context,listen: false).setTheme(index == 0 ? Themes.SYSTEM : (index == 1 ? Themes.DARK : Themes.LIGHT)),
  51. child: Container(
  52. color: ThemeUtils.getTabsBg(context),
  53. alignment: Alignment.centerLeft,
  54. padding: const EdgeInsets.symmetric(horizontal: 16.0),
  55. height: 50.0,
  56. child: Row(
  57. children: <Widget>[
  58. Expanded(
  59. child: Text(_list[index]),
  60. ),
  61. Opacity(
  62. opacity: themeMode == _list[index] ? 1 : 0,
  63. child: Icon(Icons.done, color: Colors.blue)
  64. )
  65. ],
  66. ),
  67. ),
  68. );
  69. }
  70. ),
  71. );
  72. }
  73. }