mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-08-24 01:08:09 +08:00

Instead of the legacy Provider.of. Less scope of bugs this way and the code is so much nicer to read.
171 lines
4.3 KiB
Dart
171 lines
4.3 KiB
Dart
/*
|
|
* SPDX-FileCopyrightText: 2021 Vishesh Handa <me@vhanda.in>
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
import 'package:carousel_slider/carousel_slider.dart';
|
|
// import 'package:flex_color_scheme/flex_color_scheme.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:gitjournal/l10n.dart';
|
|
import 'package:gitjournal/screens/home_screen.dart';
|
|
import 'package:gitjournal/settings/settings.dart';
|
|
import 'package:gitjournal/themes.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
class SettingsThemeScreen extends StatefulWidget {
|
|
static const routePath = '/settings/ui/theme';
|
|
|
|
final Brightness brightness;
|
|
|
|
const SettingsThemeScreen(this.brightness, {super.key});
|
|
|
|
@override
|
|
_SettingsThemeState createState() => _SettingsThemeState();
|
|
}
|
|
|
|
class _SettingsThemeState extends State<SettingsThemeScreen> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
var mq = MediaQuery.of(context);
|
|
|
|
var body = CarouselSlider(
|
|
options: CarouselOptions(
|
|
height: mq.size.height * 0.75,
|
|
enlargeCenterPage: true,
|
|
viewportFraction: 0.55,
|
|
enableInfiniteScroll: false,
|
|
),
|
|
items: [0, 1, 2, 3].map((i) {
|
|
return Builder(
|
|
builder: (BuildContext context) {
|
|
return Container(
|
|
width: MediaQuery.of(context).size.width,
|
|
margin: const EdgeInsets.symmetric(horizontal: 5.0),
|
|
// decoration: BoxDecoration(color: Colors.amber),
|
|
child: homeScreen(i),
|
|
);
|
|
},
|
|
);
|
|
}).toList(),
|
|
);
|
|
|
|
var title = widget.brightness == Brightness.light
|
|
? context.loc.settingsThemeLight
|
|
: context.loc.settingsThemeDark;
|
|
|
|
var settings = context.watch<Settings>();
|
|
var themeName = widget.brightness == Brightness.light
|
|
? settings.lightTheme
|
|
: settings.darkTheme;
|
|
|
|
return Theme(
|
|
data: Themes.fromName(themeName),
|
|
child: Scaffold(
|
|
appBar: AppBar(
|
|
title: Text(title),
|
|
leading: IconButton(
|
|
icon: const Icon(Icons.arrow_back),
|
|
onPressed: () {
|
|
Navigator.of(context).pop();
|
|
},
|
|
),
|
|
),
|
|
body: body,
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget homeScreen(int i) {
|
|
var themes = [
|
|
/*
|
|
GitJournalTheme.fromFlexLight(
|
|
name: "Mandy Red",
|
|
flexScheme: FlexScheme.mandyRed,
|
|
),
|
|
GitJournalTheme.fromFlexLight(
|
|
name: "Blue",
|
|
flexScheme: FlexScheme.blue,
|
|
),
|
|
GitJournalTheme.fromFlexLight(
|
|
name: "Big Stone",
|
|
flexScheme: FlexScheme.bigStone,
|
|
),
|
|
GitJournalTheme.fromFlexLight(
|
|
name: "Amber",
|
|
flexScheme: FlexScheme.amber,
|
|
),
|
|
*/
|
|
];
|
|
|
|
return _GitJournalThemeView(gjTheme: themes[i]);
|
|
}
|
|
}
|
|
|
|
class _GitJournalThemeView extends StatelessWidget {
|
|
final GitJournalTheme gjTheme;
|
|
|
|
const _GitJournalThemeView({required this.gjTheme});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
var mq = MediaQuery.of(context);
|
|
|
|
var homeScreen = Theme(
|
|
data: gjTheme.themeData,
|
|
child: SizedBox(
|
|
width: mq.size.width,
|
|
height: mq.size.height,
|
|
child: IgnorePointer(
|
|
// ignoringSemantics: true,
|
|
child: HomeScreen(),
|
|
),
|
|
),
|
|
);
|
|
|
|
var theme = Theme.of(context);
|
|
|
|
return FittedBox(
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(16.0),
|
|
child: Column(
|
|
children: [
|
|
Container(
|
|
decoration: BoxDecoration(
|
|
border: Border.all(color: theme.dividerColor),
|
|
),
|
|
child: homeScreen,
|
|
),
|
|
const SizedBox(height: 32),
|
|
Text(
|
|
gjTheme.name,
|
|
style: Theme.of(context).textTheme.displaySmall!.copyWith(
|
|
fontWeight: FontWeight.w400,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
// 1. Improve the carrosuel
|
|
// 3. Show Telegram type animation when changing the theme
|
|
// 5. Hook it up so the theme is actually saved
|
|
//
|
|
|
|
class GitJournalTheme {
|
|
final ThemeData themeData;
|
|
final String name;
|
|
|
|
GitJournalTheme({required this.name, required this.themeData});
|
|
|
|
/*
|
|
GitJournalTheme.fromFlexLight({
|
|
required this.name,
|
|
required FlexScheme flexScheme,
|
|
}) : themeData = FlexColorScheme.light(scheme: flexScheme).toTheme;
|
|
*/
|
|
}
|