mirror of
https://github.com/ALEZ-DEV/Babylonia-terminal.git
synced 2025-12-18 10:28:52 +00:00
some refactor and added settings panel
This commit is contained in:
parent
6d4087539e
commit
94f3128932
102
babylonia_terminal_launcher/lib/app.dart
Normal file
102
babylonia_terminal_launcher/lib/app.dart
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:yaru/yaru.dart';
|
||||||
|
|
||||||
|
import './screens/screens.dart';
|
||||||
|
|
||||||
|
import './providers/settings_provider.dart';
|
||||||
|
|
||||||
|
class BabyloniaLauncher extends StatelessWidget {
|
||||||
|
const BabyloniaLauncher({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ChangeNotifierProvider(
|
||||||
|
create: (context) => SettingsProvider(),
|
||||||
|
child: YaruTheme(
|
||||||
|
builder: (context, yaru, child) => MaterialApp(
|
||||||
|
title: "Babylonia Terminal",
|
||||||
|
debugShowCheckedModeBanner: false,
|
||||||
|
theme: yaru.theme,
|
||||||
|
darkTheme: yaru.darkTheme,
|
||||||
|
themeMode: ThemeMode.system,
|
||||||
|
highContrastTheme: yaruHighContrastLight,
|
||||||
|
highContrastDarkTheme: yaruHighContrastDark,
|
||||||
|
home: const Menu(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Menu extends StatefulWidget {
|
||||||
|
const Menu({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<Menu> createState() => _MenuState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MenuState extends State<Menu> {
|
||||||
|
int _selectedIndex = 0;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
List<Widget> items = Screens.drawerItem(
|
||||||
|
selectedIndex: _selectedIndex,
|
||||||
|
onSelected: (index) {
|
||||||
|
setState(() => _selectedIndex = index);
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
items.insert(
|
||||||
|
0,
|
||||||
|
Center(
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Theme.of(context).colorScheme.surface,
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
color: Theme.of(context).colorScheme.outline,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
vertical: 8.0,
|
||||||
|
horizontal: 50.0,
|
||||||
|
),
|
||||||
|
child: Image.asset(
|
||||||
|
'assets/images/Lee6.png',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const Text(
|
||||||
|
"Babylonia Terminal",
|
||||||
|
style: TextStyle(fontSize: 24),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
return Scaffold(
|
||||||
|
drawer: Drawer(
|
||||||
|
child: ListView(
|
||||||
|
children: items,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
appBar: AppBar(
|
||||||
|
title: const Text("Babylonia Terminal"),
|
||||||
|
centerTitle: true,
|
||||||
|
),
|
||||||
|
body: Screens.getCurrent(_selectedIndex),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,105 +1,11 @@
|
|||||||
import 'package:babylonia_terminal_launcher/screens/screens.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:media_kit/media_kit.dart';
|
import 'package:media_kit/media_kit.dart';
|
||||||
import 'package:yaru/theme.dart';
|
|
||||||
|
|
||||||
import './screens/screens.dart';
|
import './app.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
MediaKit.ensureInitialized();
|
MediaKit.ensureInitialized();
|
||||||
runApp(const BabyloniaLauncher());
|
runApp(const BabyloniaLauncher());
|
||||||
}
|
}
|
||||||
|
|
||||||
class BabyloniaLauncher extends StatelessWidget {
|
|
||||||
const BabyloniaLauncher({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return YaruTheme(
|
|
||||||
builder: (context, yaru, child) => MaterialApp(
|
|
||||||
title: "Babylonia Terminal",
|
|
||||||
debugShowCheckedModeBanner: false,
|
|
||||||
theme: yaru.theme,
|
|
||||||
darkTheme: yaru.darkTheme,
|
|
||||||
themeMode: ThemeMode.system,
|
|
||||||
highContrastTheme: yaruHighContrastLight,
|
|
||||||
highContrastDarkTheme: yaruHighContrastDark,
|
|
||||||
home: const Menu(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Menu extends StatefulWidget {
|
|
||||||
const Menu({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<Menu> createState() => _MenuState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _MenuState extends State<Menu> {
|
|
||||||
int _selectedIndex = 0;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
List<Widget> items = Screens.drawerItem(
|
|
||||||
selectedIndex: _selectedIndex,
|
|
||||||
onSelected: (index) {
|
|
||||||
setState(() => _selectedIndex = index);
|
|
||||||
Navigator.of(context).pop();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
items.insert(
|
|
||||||
0,
|
|
||||||
Center(
|
|
||||||
child: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Theme.of(context).colorScheme.surface,
|
|
||||||
border: Border(
|
|
||||||
bottom: BorderSide(
|
|
||||||
color: Theme.of(context).colorScheme.outline,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
child: Center(
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
|
||||||
child: Column(
|
|
||||||
children: [
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.symmetric(
|
|
||||||
vertical: 8.0,
|
|
||||||
horizontal: 50.0,
|
|
||||||
),
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/images/Lee6.png',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const Text(
|
|
||||||
"Babylonia Terminal",
|
|
||||||
style: TextStyle(fontSize: 24),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
return Scaffold(
|
|
||||||
drawer: Drawer(
|
|
||||||
child: ListView(
|
|
||||||
children: items,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
appBar: AppBar(
|
|
||||||
title: const Text("Babylonia Terminal"),
|
|
||||||
centerTitle: true,
|
|
||||||
),
|
|
||||||
body: Screens.getCurrent(_selectedIndex),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
85
babylonia_terminal_launcher/lib/models/settings.dart
Normal file
85
babylonia_terminal_launcher/lib/models/settings.dart
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
enum BackgroundType {
|
||||||
|
contain,
|
||||||
|
fill,
|
||||||
|
cover,
|
||||||
|
fitHeight,
|
||||||
|
fitWidth,
|
||||||
|
disable,
|
||||||
|
}
|
||||||
|
|
||||||
|
class Settings {
|
||||||
|
BackgroundType _backgroundType = BackgroundType.cover;
|
||||||
|
|
||||||
|
static final List<BackgroundType> backgoundList = [
|
||||||
|
BackgroundType.contain,
|
||||||
|
BackgroundType.fill,
|
||||||
|
BackgroundType.cover,
|
||||||
|
BackgroundType.fitHeight,
|
||||||
|
BackgroundType.fitWidth,
|
||||||
|
BackgroundType.disable,
|
||||||
|
];
|
||||||
|
|
||||||
|
static String getStringNameOfBackgroundType(BackgroundType backgroundType) {
|
||||||
|
switch (backgroundType) {
|
||||||
|
case BackgroundType.contain:
|
||||||
|
return 'contain';
|
||||||
|
case BackgroundType.fill:
|
||||||
|
return 'fill';
|
||||||
|
case BackgroundType.cover:
|
||||||
|
return 'cover';
|
||||||
|
case BackgroundType.fitHeight:
|
||||||
|
return 'fitHeight';
|
||||||
|
case BackgroundType.fitWidth:
|
||||||
|
return 'fitWidth';
|
||||||
|
case BackgroundType.disable:
|
||||||
|
return 'disable';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static BackgroundType getBackgroundTypeFromString(String background) {
|
||||||
|
switch (background) {
|
||||||
|
case 'contain':
|
||||||
|
return BackgroundType.contain;
|
||||||
|
case 'fill':
|
||||||
|
return BackgroundType.fill;
|
||||||
|
case 'cover':
|
||||||
|
return BackgroundType.cover;
|
||||||
|
case 'fitHeight':
|
||||||
|
return BackgroundType.fitHeight;
|
||||||
|
case 'fitWidth':
|
||||||
|
return BackgroundType.fitWidth;
|
||||||
|
case 'disable':
|
||||||
|
return BackgroundType.disable;
|
||||||
|
default:
|
||||||
|
throw FormatException('Can\'t convert String to Enum BackgroundType!');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static BoxFit getBoxFitFromBackgroundType(BackgroundType backgroundType) {
|
||||||
|
switch (backgroundType) {
|
||||||
|
case BackgroundType.contain:
|
||||||
|
return BoxFit.contain;
|
||||||
|
case BackgroundType.fill:
|
||||||
|
return BoxFit.fill;
|
||||||
|
case BackgroundType.cover:
|
||||||
|
return BoxFit.cover;
|
||||||
|
case BackgroundType.fitHeight:
|
||||||
|
return BoxFit.fitHeight;
|
||||||
|
case BackgroundType.fitWidth:
|
||||||
|
return BoxFit.fitWidth;
|
||||||
|
case BackgroundType.disable:
|
||||||
|
throw FormatException(
|
||||||
|
'Can\'t convert BackgroundType to widget BoxFit!');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BackgroundType get selectedBackgroundType {
|
||||||
|
return _backgroundType;
|
||||||
|
}
|
||||||
|
|
||||||
|
set selectedBackgroundType(BackgroundType selectedBackground) {
|
||||||
|
_backgroundType = selectedBackground;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import './../models/settings.dart';
|
||||||
|
|
||||||
|
class SettingsProvider with ChangeNotifier {
|
||||||
|
final Settings _settings = Settings();
|
||||||
|
|
||||||
|
set setSelectedBackgroundType(BackgroundType selectedBackground) {
|
||||||
|
_settings.selectedBackgroundType = selectedBackground;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
get getSelectedBackgroundType {
|
||||||
|
return _settings.selectedBackgroundType;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,9 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
import './../widgets/background.dart';
|
import './../widgets/background.dart';
|
||||||
|
import './../providers/settings_provider.dart';
|
||||||
|
import './../models/settings.dart';
|
||||||
|
|
||||||
class HomeScreen extends StatelessWidget {
|
class HomeScreen extends StatelessWidget {
|
||||||
const HomeScreen({super.key});
|
const HomeScreen({super.key});
|
||||||
@ -9,25 +12,65 @@ class HomeScreen extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Stack(
|
return Stack(
|
||||||
children: [
|
children: [
|
||||||
const Background(),
|
if (Provider.of<SettingsProvider>(context).getSelectedBackgroundType !=
|
||||||
SizedBox(
|
BackgroundType.disable)
|
||||||
child: Align(
|
const Background()
|
||||||
alignment: Alignment.bottomRight,
|
else
|
||||||
child: Padding(
|
Center(
|
||||||
padding: const EdgeInsets.only(right: 50, bottom: 50),
|
child: Column(
|
||||||
child: ElevatedButton(
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
style: ElevatedButton.styleFrom(
|
children: [
|
||||||
backgroundColor: Colors.blue[500],
|
SizedBox(
|
||||||
|
height: 300,
|
||||||
|
child: Image.asset('assets/images/Lee6.png'),
|
||||||
),
|
),
|
||||||
onPressed: () {},
|
const Center(
|
||||||
child: const SizedBox(
|
child: Padding(
|
||||||
width: 300,
|
padding: EdgeInsets.all(8.0),
|
||||||
height: 25,
|
child: Text(
|
||||||
child: Center(
|
'Babylonia Terminal',
|
||||||
child: Text("Download"),
|
style: TextStyle(
|
||||||
|
fontSize: 34,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(50.0),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
const Expanded(
|
||||||
|
child: SizedBox(),
|
||||||
|
),
|
||||||
|
const Expanded(
|
||||||
|
child: SizedBox(),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(
|
||||||
|
maxHeight: 50,
|
||||||
|
),
|
||||||
|
child: ElevatedButton(
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
backgroundColor: Colors.blue[500],
|
||||||
|
),
|
||||||
|
onPressed: () {},
|
||||||
|
child: const Center(
|
||||||
|
child: Text("Download"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import 'package:yaru/icons.dart';
|
|||||||
import 'package:babylonia_terminal_launcher/screens/home_screen.dart';
|
import 'package:babylonia_terminal_launcher/screens/home_screen.dart';
|
||||||
|
|
||||||
class Screens {
|
class Screens {
|
||||||
static final screens = <Widget, (Widget, Widget, String)>{
|
static final _screens = <Widget, (Widget, Widget, String)>{
|
||||||
const HomeScreen(): (
|
const HomeScreen(): (
|
||||||
const Icon(YaruIcons.home_filled),
|
const Icon(YaruIcons.home_filled),
|
||||||
const Icon(YaruIcons.home),
|
const Icon(YaruIcons.home),
|
||||||
@ -21,16 +21,16 @@ class Screens {
|
|||||||
static List<Widget> drawerItem(
|
static List<Widget> drawerItem(
|
||||||
{required Function(int) onSelected, required int selectedIndex}) =>
|
{required Function(int) onSelected, required int selectedIndex}) =>
|
||||||
[
|
[
|
||||||
for (int i = 0; i < Screens.screens.values.length; i++)
|
for (int i = 0; i < Screens._screens.values.length; i++)
|
||||||
ListTile(
|
ListTile(
|
||||||
selected: i == selectedIndex,
|
selected: i == selectedIndex,
|
||||||
leading: i == selectedIndex
|
leading: i == selectedIndex
|
||||||
? Screens.screens.values.elementAt(i).$1
|
? Screens._screens.values.elementAt(i).$1
|
||||||
: Screens.screens.values.elementAt(i).$2,
|
: Screens._screens.values.elementAt(i).$2,
|
||||||
title: Text(Screens.screens.values.elementAt(i).$3),
|
title: Text(Screens._screens.values.elementAt(i).$3),
|
||||||
onTap: () => onSelected(i),
|
onTap: () => onSelected(i),
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
static Widget getCurrent(int index) => Screens.screens.keys.toList()[index];
|
static Widget getCurrent(int index) => Screens._screens.keys.toList()[index];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,12 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class GameSettingsPage extends StatelessWidget {
|
||||||
|
const GameSettingsPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return const Center(
|
||||||
|
child: Text('Game settings'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class GeneralSettingsPage extends StatelessWidget {
|
||||||
|
const GeneralSettingsPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return const Center(
|
||||||
|
child: Text("General settings"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:yaru/yaru.dart';
|
||||||
|
|
||||||
|
import './general_settings_page.dart';
|
||||||
|
import './game_settings_page.dart';
|
||||||
|
import './style_settings_page.dart';
|
||||||
|
|
||||||
|
class SettingsPage {
|
||||||
|
static final _pages = <Widget, (Widget, String)>{
|
||||||
|
const GeneralSettingsPage(): (
|
||||||
|
const Icon(YaruIcons.gears),
|
||||||
|
'General',
|
||||||
|
),
|
||||||
|
const GameSettingsPage(): (
|
||||||
|
const Icon(YaruIcons.game_controller_filled),
|
||||||
|
'Game',
|
||||||
|
),
|
||||||
|
const StyleSettingsPage(): (
|
||||||
|
const Icon(YaruIcons.desktop_appearance_filled),
|
||||||
|
'Style',
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
static List<Widget> tabItems() => [
|
||||||
|
for (int i = 0; i < SettingsPage._pages.values.length; i++)
|
||||||
|
YaruTab(
|
||||||
|
icon: SettingsPage._pages.values.elementAt(i).$1,
|
||||||
|
label: SettingsPage._pages.values.elementAt(i).$2,
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
static List<Widget> getPages() => SettingsPage._pages.keys.toList();
|
||||||
|
}
|
||||||
@ -0,0 +1,60 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:yaru/yaru.dart';
|
||||||
|
|
||||||
|
import './../../providers/settings_provider.dart';
|
||||||
|
import './../../models/settings.dart';
|
||||||
|
|
||||||
|
class StyleSettingsPage extends StatefulWidget {
|
||||||
|
const StyleSettingsPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<StyleSettingsPage> createState() => _StyleSettingsPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _StyleSettingsPageState extends State<StyleSettingsPage> {
|
||||||
|
late int _radioValue;
|
||||||
|
|
||||||
|
void setBackgroundValue(
|
||||||
|
BuildContext context,
|
||||||
|
SettingsProvider provider,
|
||||||
|
int? value,
|
||||||
|
) {
|
||||||
|
if (value != null) {
|
||||||
|
provider.setSelectedBackgroundType = Settings.backgoundList[value];
|
||||||
|
setState(() {
|
||||||
|
_radioValue = value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final provider = Provider.of<SettingsProvider>(context, listen: false);
|
||||||
|
_radioValue = Settings.backgoundList.indexWhere(
|
||||||
|
(element) => element == provider.getSelectedBackgroundType,
|
||||||
|
);
|
||||||
|
|
||||||
|
return Center(
|
||||||
|
child: YaruSection(
|
||||||
|
headline: const Text('Background video'),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
for (int i = 0; i < Settings.backgoundList.length; i++)
|
||||||
|
YaruRadioListTile(
|
||||||
|
value: i,
|
||||||
|
groupValue: _radioValue,
|
||||||
|
onChanged: (v) => setBackgroundValue(context, provider, v),
|
||||||
|
toggleable: true,
|
||||||
|
title: Text(
|
||||||
|
Settings.getStringNameOfBackgroundType(
|
||||||
|
Settings.backgoundList[i],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,12 +1,51 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:yaru/yaru.dart';
|
||||||
|
|
||||||
class SettingsScreen extends StatelessWidget {
|
import './settings/settings_pages.dart';
|
||||||
|
|
||||||
|
class SettingsScreen extends StatefulWidget {
|
||||||
const SettingsScreen({super.key});
|
const SettingsScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<SettingsScreen> createState() => _SettingsScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _SettingsScreenState extends State<SettingsScreen>
|
||||||
|
with TickerProviderStateMixin {
|
||||||
|
late TabController tabController;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
tabController =
|
||||||
|
TabController(length: SettingsPage.getPages().length, vsync: this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
tabController.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return const Center(
|
return Center(
|
||||||
child: Text('Settings screen'),
|
child: Column(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
child: YaruTabBar(
|
||||||
|
tabController: tabController,
|
||||||
|
tabs: SettingsPage.tabItems(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: TabBarView(
|
||||||
|
controller: tabController,
|
||||||
|
children: SettingsPage.getPages(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,10 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:media_kit/media_kit.dart';
|
import 'package:media_kit/media_kit.dart';
|
||||||
import 'package:media_kit_video/media_kit_video.dart';
|
import 'package:media_kit_video/media_kit_video.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import './../providers/settings_provider.dart';
|
||||||
|
import './../models/settings.dart';
|
||||||
|
|
||||||
class Background extends StatefulWidget {
|
class Background extends StatefulWidget {
|
||||||
const Background({super.key});
|
const Background({super.key});
|
||||||
@ -34,12 +38,16 @@ class _BackgroundState extends State<Background> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final provider = Provider.of<SettingsProvider>(context);
|
||||||
|
|
||||||
player.play();
|
player.play();
|
||||||
return Video(
|
return Video(
|
||||||
controller: controller,
|
controller: controller,
|
||||||
controls: NoVideoControls,
|
controls: NoVideoControls,
|
||||||
wakelock: false,
|
wakelock: false,
|
||||||
fit: BoxFit.cover,
|
fit: Settings.getBoxFitFromBackgroundType(
|
||||||
|
provider.getSelectedBackgroundType,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,6 +43,7 @@ dependencies:
|
|||||||
media_kit_video: any
|
media_kit_video: any
|
||||||
media_kit_libs_video: any
|
media_kit_libs_video: any
|
||||||
media_kit_native_event_loop: any
|
media_kit_native_event_loop: any
|
||||||
|
provider: ^6.1.2
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
media_kit:
|
media_kit:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user