From 965ed2d029afb0872846786798c0622cd6c77602 Mon Sep 17 00:00:00 2001 From: Kirill Date: Fri, 6 Jun 2025 13:58:56 +0300 Subject: [PATCH] Update Android embedding --- README.md | 8 +-- news_app/.metadata | 4 +- .../android/app/src/main/AndroidManifest.xml | 22 ++++--- .../com/kaparray/newsapp/MainActivity.java | 9 +-- news_app/lib/blocs/news_bloc.dart | 7 ++- news_app/lib/main.dart | 58 ++++++++++++------- news_app/lib/models/news_model.dart | 1 + news_app/lib/resources/news_api_provider.dart | 1 + news_app/lib/resources/repository.dart | 1 + news_app/lib/ui/bottom_nav_bar.dart | 9 +-- news_app/lib/ui/screens/liked_list.dart | 1 + news_app/lib/ui/screens/news_list.dart | 1 + news_app/lib/ui/screens/serch_screen.dart | 1 + news_app/lib/ui/screens/settings_screen.dart | 33 +++++++---- news_app/lib/ui/screens/web_view.dart | 1 + news_app/lib/ui/utils/back_to_start.dart | 1 + news_app/lib/ui/views/item_build.dart | 3 +- news_app/lib/ui/views/search_bar.dart | 1 + news_app/lib/ui/views/stream_builder.dart | 1 + news_app/pubspec.yaml | 28 ++++----- 20 files changed, 115 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index 97dff78..c45e632 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,10 @@ This example uses a CustomScrollView, JSON Rest API, BottonNavigationBar,SliverL * [*__http__*](https://pub.dartlang.org/packages/http) * [*__webview_flutter__*](https://pub.dartlang.org/packages/webview_flutter) * [*__shared_preferences__*](https://pub.dartlang.org/packages/shared_preferences) -* [*__share__*](https://pub.dartlang.org/packages/share) -* [*__cloud_firestore__*](https://pub.dartlang.org/packages/cloud_firestore) -* [*__uuid__*](https://pub.dartlang.org/packages/uuid) -* [*__dynamic_theme__*](https://pub.dartlang.org/packages/dynamic_theme) +* [*__share_plus__*](https://pub.dev/packages/share_plus) +* [*__cloud_firestore__*](https://pub.dev/packages/cloud_firestore) +* [*__uuid__*](https://pub.dev/packages/uuid) +* [*__adaptive_theme__*](https://pub.dev/packages/adaptive_theme) * [*__flutter_picker__*](https://pub.dartlang.org/packages/flutter_picker) * [*__flutter_material_color_picker__*](https://pub.dartlang.org/packages/flutter_material_color_picker) diff --git a/news_app/.metadata b/news_app/.metadata index fd2a86f..12216e6 100644 --- a/news_app/.metadata +++ b/news_app/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: 5391447fae6209bb21a89e6a5a6583cac1af9b4b - channel: beta + revision: 8defaa71a77c16e8547abdbfad2053ce3a6e2d5b + channel: stable project_type: app diff --git a/news_app/android/app/src/main/AndroidManifest.xml b/news_app/android/app/src/main/AndroidManifest.xml index 570c700..e85e9a3 100644 --- a/news_app/android/app/src/main/AndroidManifest.xml +++ b/news_app/android/app/src/main/AndroidManifest.xml @@ -13,27 +13,33 @@ additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --> - + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" /> + + + + + + + diff --git a/news_app/android/app/src/main/java/com/kaparray/newsapp/MainActivity.java b/news_app/android/app/src/main/java/com/kaparray/newsapp/MainActivity.java index b5e63c3..9d68ba2 100644 --- a/news_app/android/app/src/main/java/com/kaparray/newsapp/MainActivity.java +++ b/news_app/android/app/src/main/java/com/kaparray/newsapp/MainActivity.java @@ -1,13 +1,6 @@ package com.kaparray.newsapp; -import android.os.Bundle; -import io.flutter.app.FlutterActivity; -import io.flutter.plugins.GeneratedPluginRegistrant; +import io.flutter.embedding.android.FlutterActivity; public class MainActivity extends FlutterActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); - } } diff --git a/news_app/lib/blocs/news_bloc.dart b/news_app/lib/blocs/news_bloc.dart index afa2635..9b152f3 100644 --- a/news_app/lib/blocs/news_bloc.dart +++ b/news_app/lib/blocs/news_bloc.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import '../resources/repository.dart'; import 'package:rxdart/rxdart.dart'; import '../models/news_model.dart'; @@ -8,9 +9,9 @@ class NewsBloc { final _newsSearchFetcher = PublishSubject(); final _newsLikeFetcher = PublishSubject(); - Observable get allNews => _newsFetcher.stream; - Observable get searchNews => _newsSearchFetcher.stream; - Observable get likeNews => _newsLikeFetcher.stream; + Stream get allNews => _newsFetcher.stream; + Stream get searchNews => _newsSearchFetcher.stream; + Stream get likeNews => _newsLikeFetcher.stream; fetchLikedNews() async { NewsModel newsModel = await _repository.fetchLikedNews(); diff --git a/news_app/lib/main.dart b/news_app/lib/main.dart index ed96718..0296e4d 100644 --- a/news_app/lib/main.dart +++ b/news_app/lib/main.dart @@ -1,7 +1,8 @@ +// @dart=2.9 import 'package:flutter/material.dart'; import 'package:news_app/blocs/news_bloc.dart'; import 'package:news_app/ui/bottom_nav_bar.dart'; -import 'package:dynamic_theme/dynamic_theme.dart'; +import 'package:adaptive_theme/adaptive_theme.dart'; import 'package:shared_preferences/shared_preferences.dart'; Future _prefs = SharedPreferences.getInstance(); @@ -10,8 +11,10 @@ int color; String theme; void main() async { + WidgetsFlutterBinding.ensureInitialized(); await initApp(); - runApp(App()); + final savedThemeMode = await AdaptiveTheme.getThemeMode(); + runApp(App(savedThemeMode: savedThemeMode)); } initApp() async { @@ -32,12 +35,15 @@ initApp() async { @immutable class App extends StatefulWidget { + final AdaptiveThemeMode? savedThemeMode; + + const App({Key key, this.savedThemeMode}) : super(key: key); + @override createState() => AppState(); } class AppState extends State { - Brightness _brightness; @override void dispose() { @@ -47,23 +53,35 @@ class AppState extends State { @override Widget build(BuildContext context) { - if (theme == 'dark') - _brightness = Brightness.dark; - else if (theme == 'light') _brightness = Brightness.light; + final brightness = theme == 'dark' ? Brightness.dark : Brightness.light; + final seedColor = Color(color ?? 0xFF26A69A); - return DynamicTheme( - defaultBrightness: _brightness, - data: (brightness) => ThemeData( - brightness: _brightness, accentColor: Color(color ?? 0xFF26A69A)), - themedWidgetBuilder: (context, theme) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: BottomNavBar(), - theme: theme, - routes: { - "/news": (_) => BottomNavBar(), - }, - ); - }); + return AdaptiveTheme( + light: ThemeData( + useMaterial3: true, + brightness: Brightness.light, + colorSchemeSeed: seedColor, + ), + dark: ThemeData( + useMaterial3: true, + brightness: Brightness.dark, + colorSchemeSeed: seedColor, + ), + initial: widget.savedThemeMode ?? + (brightness == Brightness.dark + ? AdaptiveThemeMode.dark + : AdaptiveThemeMode.light), + builder: (themeData, darkTheme) { + return MaterialApp( + debugShowCheckedModeBanner: false, + home: BottomNavBar(), + theme: themeData, + darkTheme: darkTheme, + routes: { + "/news": (_) => BottomNavBar(), + }, + ); + }, + ); } } diff --git a/news_app/lib/models/news_model.dart b/news_app/lib/models/news_model.dart index 1292572..97c3baa 100644 --- a/news_app/lib/models/news_model.dart +++ b/news_app/lib/models/news_model.dart @@ -1,3 +1,4 @@ +// @dart=2.9 class NewsModel { String status; int totalResults; diff --git a/news_app/lib/resources/news_api_provider.dart b/news_app/lib/resources/news_api_provider.dart index 6058a14..0e7d7a5 100644 --- a/news_app/lib/resources/news_api_provider.dart +++ b/news_app/lib/resources/news_api_provider.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'dart:async'; import 'package:http/http.dart' show Client; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/news_app/lib/resources/repository.dart b/news_app/lib/resources/repository.dart index 54b820f..a5874cf 100644 --- a/news_app/lib/resources/repository.dart +++ b/news_app/lib/resources/repository.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'dart:async'; import 'news_api_provider.dart'; diff --git a/news_app/lib/ui/bottom_nav_bar.dart b/news_app/lib/ui/bottom_nav_bar.dart index 776412c..4930e7d 100644 --- a/news_app/lib/ui/bottom_nav_bar.dart +++ b/news_app/lib/ui/bottom_nav_bar.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'package:flutter/material.dart'; import 'package:news_app/ui/screens/liked_list.dart'; import 'package:news_app/ui/screens/news_list.dart'; @@ -25,16 +26,16 @@ class BottomNavBarState extends State { bottomNavigationBar: BottomNavigationBar( items: [ BottomNavigationBarItem( - icon: Icon(Icons.chrome_reader_mode), title: Text('News')), + icon: Icon(Icons.chrome_reader_mode), label: 'News'), BottomNavigationBarItem( icon: Icon(Icons.favorite_border), - title: Text('Favorit'), + label: 'Favorit', activeIcon: Icon(Icons.favorite)), BottomNavigationBarItem( - icon: Icon(Icons.settings), title: Text('Settings')) + icon: Icon(Icons.settings), label: 'Settings') ], currentIndex: _currentItem, - fixedColor: Theme.of(context).accentColor, + selectedItemColor: Theme.of(context).accentColor, onTap: _onItemTapped, ), body: _listWidgets[_currentItem]); diff --git a/news_app/lib/ui/screens/liked_list.dart b/news_app/lib/ui/screens/liked_list.dart index 49dc3bf..963b075 100644 --- a/news_app/lib/ui/screens/liked_list.dart +++ b/news_app/lib/ui/screens/liked_list.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'package:news_app/blocs/news_bloc.dart'; import 'package:news_app/ui/views/stream_builder.dart'; import 'package:flutter/material.dart'; diff --git a/news_app/lib/ui/screens/news_list.dart b/news_app/lib/ui/screens/news_list.dart index cf67fa6..b7f313f 100644 --- a/news_app/lib/ui/screens/news_list.dart +++ b/news_app/lib/ui/screens/news_list.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'package:news_app/blocs/news_bloc.dart'; import 'package:news_app/ui/views/search_bar.dart'; import 'package:news_app/ui/views/stream_builder.dart'; diff --git a/news_app/lib/ui/screens/serch_screen.dart b/news_app/lib/ui/screens/serch_screen.dart index 989bf8c..c503802 100644 --- a/news_app/lib/ui/screens/serch_screen.dart +++ b/news_app/lib/ui/screens/serch_screen.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'package:flutter/material.dart'; import 'package:news_app/blocs/news_bloc.dart'; import 'package:news_app/ui/views/stream_builder.dart'; diff --git a/news_app/lib/ui/screens/settings_screen.dart b/news_app/lib/ui/screens/settings_screen.dart index 4a5b81b..8fc3958 100644 --- a/news_app/lib/ui/screens/settings_screen.dart +++ b/news_app/lib/ui/screens/settings_screen.dart @@ -1,6 +1,7 @@ +// @dart=2.9 import 'dart:convert'; import 'package:flutter_picker/flutter_picker.dart'; -import 'package:dynamic_theme/dynamic_theme.dart'; +import 'package:adaptive_theme/adaptive_theme.dart'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_material_color_picker/flutter_material_color_picker.dart'; @@ -122,11 +123,10 @@ class SettingsState extends State { // Theme Logic changeTheme(value) async { SharedPreferences prefs = await _prefs; - DynamicTheme.of(context).setThemeData(ThemeData( - accentColor: Theme.of(context).accentColor, - brightness: Theme.of(context).brightness == Brightness.dark - ? Brightness.light - : Brightness.dark)); + if (AdaptiveTheme.of(context).mode == AdaptiveThemeMode.dark) + AdaptiveTheme.of(context).setLight(); + else + AdaptiveTheme.of(context).setDark(); setState(() { swTheme = value; }); @@ -181,7 +181,7 @@ class SettingsState extends State { showDialog( context: context, - child: SimpleDialog( + builder: (context) => SimpleDialog( title: Text('Primary color', style: TextStyle(fontSize: 24)), children: [ MaterialColorPicker( @@ -209,16 +209,25 @@ class SettingsState extends State { Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - FlatButton( + TextButton( onPressed: () { Navigator.pop(context, false); }, child: Text("Cancel")), - FlatButton( + TextButton( onPressed: () async { - DynamicTheme.of(context).setThemeData(ThemeData( - accentColor: local, - brightness: Theme.of(context).brightness)); + AdaptiveTheme.of(context).setTheme( + light: ThemeData( + useMaterial3: true, + brightness: Brightness.light, + colorSchemeSeed: local, + ), + dark: ThemeData( + useMaterial3: true, + brightness: Brightness.dark, + colorSchemeSeed: local, + ), + ); await prefs.setInt('color', local.value); Navigator.pop(context, false); }, diff --git a/news_app/lib/ui/screens/web_view.dart b/news_app/lib/ui/screens/web_view.dart index 71e2d1d..a29ca33 100644 --- a/news_app/lib/ui/screens/web_view.dart +++ b/news_app/lib/ui/screens/web_view.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'dart:async'; import 'package:flutter/material.dart'; import 'package:news_app/models/news_model.dart'; diff --git a/news_app/lib/ui/utils/back_to_start.dart b/news_app/lib/ui/utils/back_to_start.dart index b6cc416..1c0dbb7 100644 --- a/news_app/lib/ui/utils/back_to_start.dart +++ b/news_app/lib/ui/utils/back_to_start.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'package:flutter/material.dart'; backToStart(ScrollController scrollController) async { diff --git a/news_app/lib/ui/views/item_build.dart b/news_app/lib/ui/views/item_build.dart index 7bc7a4f..a6b690a 100644 --- a/news_app/lib/ui/views/item_build.dart +++ b/news_app/lib/ui/views/item_build.dart @@ -1,9 +1,10 @@ +// @dart=2.9 import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:news_app/models/news_model.dart'; import 'package:news_app/resources/news_api_provider.dart'; import 'package:news_app/ui/screens/web_view.dart'; -import 'package:share/share.dart'; +import 'package:share_plus/share_plus.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/news_app/lib/ui/views/search_bar.dart b/news_app/lib/ui/views/search_bar.dart index 428fedf..77b5af0 100644 --- a/news_app/lib/ui/views/search_bar.dart +++ b/news_app/lib/ui/views/search_bar.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'package:flutter/material.dart'; import 'package:news_app/ui/screens/serch_screen.dart'; import 'package:shared_preferences/shared_preferences.dart'; diff --git a/news_app/lib/ui/views/stream_builder.dart b/news_app/lib/ui/views/stream_builder.dart index 7d6f3a9..6da13a8 100644 --- a/news_app/lib/ui/views/stream_builder.dart +++ b/news_app/lib/ui/views/stream_builder.dart @@ -1,3 +1,4 @@ +// @dart=2.9 import 'package:flutter/material.dart'; import 'package:news_app/ui/views/item_build.dart'; diff --git a/news_app/pubspec.yaml b/news_app/pubspec.yaml index fcb2794..d149396 100644 --- a/news_app/pubspec.yaml +++ b/news_app/pubspec.yaml @@ -10,28 +10,28 @@ description: A new Flutter project. version: 1.0.5 environment: - sdk: ">=2.0.0-dev.68.0 <3.0.0" + sdk: ">=2.12.0 <3.0.0" dependencies: flutter: sdk: flutter - rxdart: ^0.18.0 - http: any - webview_flutter: ^0.3.0 - url_launcher: ^4.2.0+1 - shared_preferences: ^0.4.3 - share: ^0.5.3 - cloud_firestore: ^0.8.2+3 - uuid: ^1.0.3 - dynamic_theme: ^1.0.0 - flutter_picker: ^1.0.6 - flutter_material_color_picker: ^0.0.4 - intl: ^0.15.7 + rxdart: ^0.27.7 + http: ^0.13.6 + webview_flutter: ^4.2.2 + url_launcher: ^6.2.6 + shared_preferences: ^2.2.2 + share_plus: ^8.0.2 + cloud_firestore: ^4.15.9 + uuid: ^3.0.7 + adaptive_theme: ^2.3.1 + flutter_picker: ^2.1.0 + flutter_material_color_picker: ^1.1.0+2 + intl: ^0.18.1 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^0.1.2 + cupertino_icons: ^1.0.2 dev_dependencies: flutter_test: