增加全局置灰功能

This commit is contained in:
胡天 2023-07-23 17:47:15 +08:00
parent 998f61dea7
commit a7d4f1d256
5 changed files with 52 additions and 35 deletions

View File

@ -8,10 +8,13 @@ class ConfigService extends GetxService {
static ConfigService get to => Get.find(); static ConfigService get to => Get.find();
bool isFirstOpen = false; bool isFirstOpen = false;
RxBool isGrayFilter = false.obs;
PackageInfo? _platform; PackageInfo? _platform;
String get version => _platform?.version ?? "-"; String get version => _platform?.version ?? "-";
bool get isRelease => bool.fromEnvironment("dart.vm.product"); bool get isRelease => bool.fromEnvironment("dart.vm.product");
Locale locale = Locale("en", "US"); Locale locale = Locale("en", "US");
List<Locale> languages = [ List<Locale> languages = [
@ -25,6 +28,10 @@ class ConfigService extends GetxService {
isFirstOpen = StorageService.to.getBool(StorageDeviceFirstOpenKey); isFirstOpen = StorageService.to.getBool(StorageDeviceFirstOpenKey);
} }
void changeGrayTheme() {
isGrayFilter.value = !isGrayFilter.value;
}
Future<void> getPlatform() async { Future<void> getPlatform() async {
_platform = await PackageInfo.fromPlatform(); _platform = await PackageInfo.fromPlatform();
} }
@ -35,8 +42,8 @@ class ConfigService extends GetxService {
} }
void onInitLocale() { void onInitLocale() {
String langCode = StorageService.to.getString(StorageLanguageCode); String langCode = StorageService.to.getString(StorageLanguageCode);
if (langCode .isEmpty) return; if (langCode.isEmpty) return;
int index = languages.indexWhere((element) { int index = languages.indexWhere((element) {
return element.languageCode == langCode; return element.languageCode == langCode;
@ -51,4 +58,4 @@ class ConfigService extends GetxService {
Get.updateLocale(value); Get.updateLocale(value);
StorageService.to.setString(StorageLanguageCode, value.languageCode); StorageService.to.setString(StorageLanguageCode, value.languageCode);
} }
} }

View File

@ -10,6 +10,7 @@ import 'package:news_getx/utils/loading.dart';
class Global { class Global {
/// ///
static Future init() async { static Future init() async {
//
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:news_getx/data/services/config.dart';
import 'package:news_getx/global.dart'; import 'package:news_getx/global.dart';
import 'package:news_getx/routes/app_pages.dart'; import 'package:news_getx/routes/app_pages.dart';
import 'package:news_getx/theme/app_theme.dart'; import 'package:news_getx/theme/app_theme.dart';
@ -23,6 +24,15 @@ class MyApp extends StatelessWidget {
// true column就不会随着软键盘而变化 // true column就不会随着软键盘而变化
// useInheritedMediaQuery: true, // useInheritedMediaQuery: true,
builder: (BuildContext context, Widget? child) { builder: (BuildContext context, Widget? child) {
var app = GetMaterialApp(
title: 'News',
debugShowCheckedModeBanner: false,
theme: AppTheme.light,
initialRoute: AppRoutes.Initial,
getPages: AppPages.pages,
builder: EasyLoading.init(),
);
return RefreshConfiguration( return RefreshConfiguration(
headerBuilder: () => ClassicHeader(), headerBuilder: () => ClassicHeader(),
footerBuilder: () => ClassicFooter(), footerBuilder: () => ClassicFooter(),
@ -30,14 +40,12 @@ class MyApp extends StatelessWidget {
headerTriggerDistance: 80, headerTriggerDistance: 80,
maxOverScrollExtent: 100, maxOverScrollExtent: 100,
footerTriggerDistance: 150, footerTriggerDistance: 150,
child: GetMaterialApp( child: Obx(() {
title: 'News', return ConfigService.to.isGrayFilter.isTrue ? ColorFiltered(
debugShowCheckedModeBanner: false, colorFilter: ColorFilter.mode(Colors.white, BlendMode.color),
theme: AppTheme.light, child: app,
initialRoute: AppRoutes.Initial, ) : app;
getPages: AppPages.pages, }),
builder: EasyLoading.init(),
),
); );
}, },
); );

View File

@ -23,30 +23,31 @@ class _NewsPageListState extends State<NewsPageList>
Widget build(BuildContext context) { Widget build(BuildContext context) {
super.build(context); super.build(context);
return GetX<CategoryController>( return GetX<CategoryController>(
init: controller, init: controller,
builder: (controller) { builder: (controller) {
return SmartRefresher( return SmartRefresher(
controller: controller.refreshController, controller: controller.refreshController,
enablePullUp: true, enablePullUp: true,
onRefresh: controller.onRefresh, onRefresh: controller.onRefresh,
onLoading: controller.onLoading, onLoading: controller.onLoading,
child: CustomScrollView( child: CustomScrollView(
slivers: [ slivers: [
SliverPadding( SliverPadding(
padding: EdgeInsets.symmetric(vertical: 0.w, horizontal: 0.h), padding: EdgeInsets.symmetric(vertical: 0.w, horizontal: 0.h),
sliver: SliverList( sliver: SliverList(
delegate: SliverChildBuilderDelegate( delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) { (BuildContext context, int index) {
var item = controller.state.newsList[index]; var item = controller.state.newsList[index];
return NewsListItem(newsItem: item); return NewsListItem(newsItem: item);
}, },
childCount: controller.state.newsList.length, childCount: controller.state.newsList.length,
),
), ),
), ),
], ),
), ],
); ),
}); );
},
);
} }
} }

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:news_getx/data/services/config.dart';
import 'package:news_getx/modules/main/main_controller.dart'; import 'package:news_getx/modules/main/main_controller.dart';
import 'package:news_getx/modules/widgets/image.dart'; import 'package:news_getx/modules/widgets/image.dart';
import 'package:news_getx/theme/app_colors.dart'; import 'package:news_getx/theme/app_colors.dart';
@ -9,7 +10,6 @@ import 'package:news_getx/utils/date.dart';
class NewsRecommendWidget extends GetView<MainController> { class NewsRecommendWidget extends GetView<MainController> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
print('推荐信息:${controller.state.newsRecommend?.thumbnail}');
return Obx( return Obx(
() => controller.state.newsRecommend == null () => controller.state.newsRecommend == null
? Container() ? Container()