Flutter 保存主题(颤振/飞镖)
早上好, 这里我有两个按钮可以改变我的应用程序的主题(亮和暗)。重新加载应用程序时,主题不是我上次选择的主题。我希望应用程序备份本地使用的最后一个主题。您可能只需要保存一个数字,以指示上一个主题使用了哪个主题。但我根本不知道怎么做 代码如下:main.dartFlutter 保存主题(颤振/飞镖),flutter,dart,save,themes,Flutter,Dart,Save,Themes,早上好, 这里我有两个按钮可以改变我的应用程序的主题(亮和暗)。重新加载应用程序时,主题不是我上次选择的主题。我希望应用程序备份本地使用的最后一个主题。您可能只需要保存一个数字,以指示上一个主题使用了哪个主题。但我根本不知道怎么做 代码如下:main.dart import 'package:flutter/material.dart'; import 'package:animated_splash_screen/animated_splash_screen.dart'; import 'pa
import 'package:flutter/material.dart';
import 'package:animated_splash_screen/animated_splash_screen.dart';
import 'package:watch/nav.dart';
import 'package:page_transition/page_transition.dart';
import 'package:watch/blocs/theme.dart';
import 'package:provider/provider.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<ThemeChanger>(
builder: (_) => ThemeChanger(ThemeData.dark()),
child: MaterialAppWithTheme(),
);
}
}
class MaterialAppWithTheme extends StatelessWidget {
@override
Widget build(BuildContext context) {
final theme = Provider.of<ThemeChanger>(context);
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: theme.getTheme(),
home: AnimatedSplashScreen(
duration: 3000,
splash: "",
splashTransition: SplashTransition.slideTransition,
pageTransitionType: PageTransitionType.downToUp,
nextScreen: Nav(),
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“package:animated_splash_screen/animated_splash_screen.dart”;
进口“包装:手表/导航镖”;
导入“package:page_transition/page_transition.dart”;
导入“package:watch/blocs/theme.dart”;
导入“包:provider/provider.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回ChangeNotifierProvider(
生成器:()=>themechance(ThemeData.dark()),
子项:MaterialAppWithTheme(),
);
}
}
类MaterialAppWithTheme扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
最终主题=提供者(上下文);
返回材料PP(
debugShowCheckedModeBanner:false,
theme:theme.getTheme(),
主页:动画SplashScreen(
时长:3000,
飞溅:“,
splashTransition:splashTransition.slideTransition,
pageTransitionType:pageTransitionType.downToUp,
nextScreen:Nav(),
),
);
}
}
设置。省道
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:watch/blocs/theme.dart';
import 'package:watch/constants.dart';
class Parametres extends StatelessWidget {
@override
Widget build(BuildContext context) {
ThemeChanger _themeChanger = Provider.of<ThemeChanger>(context);
return Scaffold(
appBar: AppBar(
title: Text('Paramètres', style: kAppBarStyle,),
elevation: 0,
automaticallyImplyLeading: false,
leading: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Icon(
Icons.arrow_back,
),
),
),
body: Container(
child: Column(
children: <Widget>[
FlatButton(
onPressed: () => _themeChanger.setTheme(
ThemeData(
bottomNavigationBarTheme: bNavBar,
scaffoldBackgroundColor: kBlackMedium,
brightness: Brightness.dark,
iconTheme: bIcons,
)),
child: Text('Dark Theme')),
FlatButton(
onPressed: () => _themeChanger.setTheme(
ThemeData(
bottomNavigationBarTheme: lNavBar,
scaffoldBackgroundColor: Colors.white,
brightness: Brightness.light,
iconTheme: lIcons,
primaryColor: kWhite,
)),
child: Text('Light Theme')),
],
),
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
导入“package:watch/blocs/theme.dart”;
导入“package:watch/constants.dart”;
类参数扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
ThemeChanger _ThemeChanger=Provider.of(上下文);
返回脚手架(
appBar:appBar(
标题:文本('Paramètres',样式:kAppBarStyle,),
海拔:0,
自动嵌入:false,
引导:手势检测器(
onTap:(){
Navigator.pop(上下文);
},
子:图标(
Icons.arrow_back,
),
),
),
主体:容器(
子:列(
儿童:[
扁平按钮(
按下时:()=>\u themechance.setTheme(
主题数据(
底部导航Bartheme:bNavBar,
脚手架背景颜色:kBlackMedium,
亮度:亮度。暗,
iconTheme:bIcons,
)),
子:文本(“黑色主题”),
扁平按钮(
按下时:()=>\u themechance.setTheme(
主题数据(
底部导航Bartheme:lNavBar,
脚手架背景颜色:颜色。白色,
亮度:亮度,亮度,
iconTheme:lIcons,
原色:kWhite,
)),
子项:文本(“灯光主题”),
],
),
),
);
}
}
谢谢您使用,您可以将简单值存储为密钥对值。将该数据加载到初始屏幕的init中,以便您可以根据主题显示屏幕。您应该使用本地内存保存主题 您可以使用共享首选项或蜂巢db或sqflite或其他数据库系统 关于更改主题,您可以使用Cubit、Bloc、Provider等,甚至ValueNotifier。 但是,您应该用“您的状态管理小部件”包装MaterialApp或CupertinoApp 再加上一些逻辑 或者你可以使用一些图书馆
共享首选项是最佳选择。因为我不知道你的主题课,我先在这里添加我的主题课:
class MyThemeModel extends ChangeNotifier{
ThemeData _themedata;
MyThemeModel(bool isActive){
if(isActive == null){
getThemeData;
}
else{
if(isActive){
_themedata = sleepTheme;
}
else{
_themedata = morningTheme;
}
}
}
ThemeData get getThemeData => _themedata;
void setThemeData(ThemeData data){
_themedata = data;
notifyListeners();
}
}
在main.dart中
void main() async{
var isSleepActive;
if(SharedPrefHelper.prefInstance.checkContains(SharedPrefKeys.ISMORNING)){
isSleepActive = SharedPrefHelper.prefInstance.getBool(SharedPrefKeys.ISMORNING);
}
else{
isSleepActive = false;
}
runApp(MultiProvider(
providers: [
ChangeNotifierProvider(
builder: (context) => MyThemeModel(isSleepActive),
)
],
child: MyApp(),
)
);
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: Provider.of<MyThemeModel>(context).getThemeData,
title: 'Theme App',
home: AnimatedSplashScreen(
duration: 3000,
splash: "",
splashTransition: SplashTransition.slideTransition,
pageTransitionType: PageTransitionType.downToUp,
nextScreen: Nav(),
),
debugShowCheckedModeBanner: false,
);
}
您可以使用共享首选项来存储键值对数据。例如:isDark(键)-真/假(值)
FlatButton(
onPressed: () => myThemeModel.setThemeData(
ThemeData(
bottomNavigationBarTheme: lNavBar,
scaffoldBackgroundColor: Colors.white,
brightness: Brightness.light,
iconTheme: lIcons,
primaryColor: kWhite,
)),
child: Text('Light Theme')),