mirror of https://github.com/flutter/samples.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.1 KiB
108 lines
3.1 KiB
// Copyright 2021 The Flutter team. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'src/constants.dart';
|
|
import 'src/home.dart';
|
|
|
|
void main() async {
|
|
runApp(const App());
|
|
}
|
|
|
|
class App extends StatefulWidget {
|
|
const App({super.key});
|
|
|
|
@override
|
|
State<App> createState() => _AppState();
|
|
}
|
|
|
|
class _AppState extends State<App> {
|
|
bool _useMaterial3 = true;
|
|
ThemeMode _themeMode = ThemeMode.system;
|
|
ColorSeed _colorSelected = ColorSeed.baseColor;
|
|
ColorImageProvider _imageSelected = ColorImageProvider.leaves;
|
|
ColorScheme? _imageColorScheme = const ColorScheme.light();
|
|
ColorSelectionMethod _colorSelectionMethod = ColorSelectionMethod.colorSeed;
|
|
|
|
bool get _useLightMode => switch (_themeMode) {
|
|
ThemeMode.system =>
|
|
View.of(context).platformDispatcher.platformBrightness ==
|
|
Brightness.light,
|
|
ThemeMode.light => true,
|
|
ThemeMode.dark => false,
|
|
};
|
|
|
|
void _handleBrightnessChange(bool useLightMode) {
|
|
setState(() {
|
|
_themeMode = useLightMode ? ThemeMode.light : ThemeMode.dark;
|
|
});
|
|
}
|
|
|
|
void _handleMaterialVersionChange() {
|
|
setState(() {
|
|
_useMaterial3 = !_useMaterial3;
|
|
});
|
|
}
|
|
|
|
void _handleColorSelect(int value) {
|
|
setState(() {
|
|
_colorSelectionMethod = ColorSelectionMethod.colorSeed;
|
|
_colorSelected = ColorSeed.values[value];
|
|
});
|
|
}
|
|
|
|
void _handleImageSelect(int value) {
|
|
final String url = ColorImageProvider.values[value].url;
|
|
ColorScheme.fromImageProvider(provider: NetworkImage(url)).then((
|
|
newScheme,
|
|
) {
|
|
setState(() {
|
|
_colorSelectionMethod = ColorSelectionMethod.image;
|
|
_imageSelected = ColorImageProvider.values[value];
|
|
_imageColorScheme = newScheme;
|
|
});
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
debugShowCheckedModeBanner: false,
|
|
title: 'Material 3',
|
|
themeMode: _themeMode,
|
|
theme: ThemeData(
|
|
colorSchemeSeed:
|
|
_colorSelectionMethod == ColorSelectionMethod.colorSeed
|
|
? _colorSelected.color
|
|
: null,
|
|
colorScheme: _colorSelectionMethod == ColorSelectionMethod.image
|
|
? _imageColorScheme
|
|
: null,
|
|
useMaterial3: _useMaterial3,
|
|
brightness: Brightness.light,
|
|
),
|
|
darkTheme: ThemeData(
|
|
colorSchemeSeed:
|
|
_colorSelectionMethod == ColorSelectionMethod.colorSeed
|
|
? _colorSelected.color
|
|
: _imageColorScheme!.primary,
|
|
useMaterial3: _useMaterial3,
|
|
brightness: Brightness.dark,
|
|
),
|
|
home: Home(
|
|
useLightMode: _useLightMode,
|
|
useMaterial3: _useMaterial3,
|
|
colorSelected: _colorSelected,
|
|
imageSelected: _imageSelected,
|
|
handleBrightnessChange: _handleBrightnessChange,
|
|
handleMaterialVersionChange: _handleMaterialVersionChange,
|
|
handleColorSelect: _handleColorSelect,
|
|
handleImageSelect: _handleImageSelect,
|
|
colorSelectionMethod: _colorSelectionMethod,
|
|
),
|
|
);
|
|
}
|
|
}
|