mirror of
				https://gitlab.com/famedly/fluffychat.git
				synced 2025-11-03 22:07:23 +01:00 
			
		
		
		
	Clean up design
This commit is contained in:
		
							parent
							
								
									5c4d9cc12f
								
							
						
					
					
						commit
						7dbb603ef2
					
				@ -2,9 +2,7 @@ import 'package:bubble/bubble.dart';
 | 
			
		||||
import 'package:cached_network_image/cached_network_image.dart';
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
import 'package:fluffychat/utils/app_route.dart';
 | 
			
		||||
import 'package:fluffychat/utils/event_extension.dart';
 | 
			
		||||
import 'package:fluffychat/views/content_web_view.dart';
 | 
			
		||||
import 'package:fluffychat/views/image_viewer.dart';
 | 
			
		||||
import 'package:flutter/foundation.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
@ -77,12 +75,8 @@ class MessageContent extends StatelessWidget {
 | 
			
		||||
                    ),
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
                onPressed: () => Navigator.of(context).push(
 | 
			
		||||
                  AppRoute.defaultRoute(
 | 
			
		||||
                    context,
 | 
			
		||||
                    ContentWebView(MxContent(event.content["url"])),
 | 
			
		||||
                  ),
 | 
			
		||||
                ),
 | 
			
		||||
                onPressed: () => launch(MxContent(event.content["url"])
 | 
			
		||||
                    .getDownloadLink(event.room.client)),
 | 
			
		||||
              ),
 | 
			
		||||
            );
 | 
			
		||||
          case MessageTypes.Video:
 | 
			
		||||
@ -102,11 +96,9 @@ class MessageContent extends StatelessWidget {
 | 
			
		||||
                    ),
 | 
			
		||||
                  ],
 | 
			
		||||
                ),
 | 
			
		||||
                onPressed: () => Navigator.of(context).push(
 | 
			
		||||
                  AppRoute.defaultRoute(
 | 
			
		||||
                    context,
 | 
			
		||||
                    ContentWebView(MxContent(event.content["url"])),
 | 
			
		||||
                  ),
 | 
			
		||||
                onPressed: () => launch(
 | 
			
		||||
                  MxContent(event.content["url"])
 | 
			
		||||
                      .getDownloadLink(event.room.client),
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										86
									
								
								lib/components/settings_themes.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								lib/components/settings_themes.dart
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,86 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
import '../components/theme_switcher.dart';
 | 
			
		||||
import '../components/matrix.dart';
 | 
			
		||||
import '../i18n/i18n.dart';
 | 
			
		||||
 | 
			
		||||
class ThemesSettings extends StatefulWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  ThemesSettingsState createState() => ThemesSettingsState();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class ThemesSettingsState extends State<ThemesSettings> {
 | 
			
		||||
  Themes _selectedTheme;
 | 
			
		||||
  bool _amoledEnabled;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    final ThemeSwitcherWidgetState themeEngine =
 | 
			
		||||
        ThemeSwitcherWidget.of(context);
 | 
			
		||||
    _selectedTheme = themeEngine.selectedTheme;
 | 
			
		||||
    _amoledEnabled = themeEngine.amoledEnabled;
 | 
			
		||||
 | 
			
		||||
    return Column(
 | 
			
		||||
      children: <Widget>[
 | 
			
		||||
        RadioListTile<Themes>(
 | 
			
		||||
          title: Text(
 | 
			
		||||
            I18n.of(context).systemTheme,
 | 
			
		||||
          ),
 | 
			
		||||
          value: Themes.system,
 | 
			
		||||
          groupValue: _selectedTheme,
 | 
			
		||||
          activeColor: Theme.of(context).primaryColor,
 | 
			
		||||
          onChanged: (Themes value) {
 | 
			
		||||
            setState(() {
 | 
			
		||||
              _selectedTheme = value;
 | 
			
		||||
              themeEngine.switchTheme(matrix, value, _amoledEnabled);
 | 
			
		||||
            });
 | 
			
		||||
          },
 | 
			
		||||
        ),
 | 
			
		||||
        RadioListTile<Themes>(
 | 
			
		||||
          title: Text(
 | 
			
		||||
            I18n.of(context).lightTheme,
 | 
			
		||||
          ),
 | 
			
		||||
          value: Themes.light,
 | 
			
		||||
          groupValue: _selectedTheme,
 | 
			
		||||
          activeColor: Theme.of(context).primaryColor,
 | 
			
		||||
          onChanged: (Themes value) {
 | 
			
		||||
            setState(() {
 | 
			
		||||
              _selectedTheme = value;
 | 
			
		||||
              themeEngine.switchTheme(matrix, value, _amoledEnabled);
 | 
			
		||||
            });
 | 
			
		||||
          },
 | 
			
		||||
        ),
 | 
			
		||||
        RadioListTile<Themes>(
 | 
			
		||||
          title: Text(
 | 
			
		||||
            I18n.of(context).darkTheme,
 | 
			
		||||
          ),
 | 
			
		||||
          value: Themes.dark,
 | 
			
		||||
          groupValue: _selectedTheme,
 | 
			
		||||
          activeColor: Theme.of(context).primaryColor,
 | 
			
		||||
          onChanged: (Themes value) {
 | 
			
		||||
            setState(() {
 | 
			
		||||
              _selectedTheme = value;
 | 
			
		||||
              themeEngine.switchTheme(matrix, value, _amoledEnabled);
 | 
			
		||||
            });
 | 
			
		||||
          },
 | 
			
		||||
        ),
 | 
			
		||||
        ListTile(
 | 
			
		||||
          title: Text(
 | 
			
		||||
            I18n.of(context).useAmoledTheme,
 | 
			
		||||
          ),
 | 
			
		||||
          trailing: Switch(
 | 
			
		||||
            value: _amoledEnabled,
 | 
			
		||||
            activeColor: Theme.of(context).primaryColor,
 | 
			
		||||
            onChanged: (bool value) {
 | 
			
		||||
              setState(() {
 | 
			
		||||
                _amoledEnabled = value;
 | 
			
		||||
                themeEngine.switchTheme(matrix, _selectedTheme, value);
 | 
			
		||||
              });
 | 
			
		||||
            },
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
      ],
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -967,7 +967,7 @@
 | 
			
		||||
    "type": "text",
 | 
			
		||||
    "placeholders": {}
 | 
			
		||||
  },
 | 
			
		||||
  "Change your style": "Change your style",
 | 
			
		||||
  "Change your style": "Ändere Deinen Style",
 | 
			
		||||
  "@Change your style": {
 | 
			
		||||
    "type": "text",
 | 
			
		||||
    "placeholders": {}
 | 
			
		||||
 | 
			
		||||
@ -151,7 +151,7 @@ class MessageLookup extends MessageLookupByLibrary {
 | 
			
		||||
    "Banned" : MessageLookupByLibrary.simpleMessage("Banned"),
 | 
			
		||||
    "Change the name of the group" : MessageLookupByLibrary.simpleMessage("Gruppenname ändern"),
 | 
			
		||||
    "Change the server" : MessageLookupByLibrary.simpleMessage("Ändere den Server"),
 | 
			
		||||
    "Change your style" : MessageLookupByLibrary.simpleMessage("Change your style"),
 | 
			
		||||
    "Change your style" : MessageLookupByLibrary.simpleMessage("Ändere Deinen Style"),
 | 
			
		||||
    "Changelog" : MessageLookupByLibrary.simpleMessage("Changelog"),
 | 
			
		||||
    "Chat details" : MessageLookupByLibrary.simpleMessage("Gruppeninfo"),
 | 
			
		||||
    "Choose a username" : MessageLookupByLibrary.simpleMessage("Wähle einen Benutzernamen"),
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,5 @@
 | 
			
		||||
import 'dart:io';
 | 
			
		||||
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter/services.dart';
 | 
			
		||||
@ -19,7 +21,7 @@ class App extends StatelessWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Matrix(
 | 
			
		||||
      clientName: "FluffyChat",
 | 
			
		||||
      clientName: "FluffyChat ${Platform.operatingSystem}",
 | 
			
		||||
      child: Builder(
 | 
			
		||||
        builder: (BuildContext context) => ThemeSwitcherWidget(
 | 
			
		||||
          child: Builder(
 | 
			
		||||
 | 
			
		||||
@ -230,9 +230,7 @@ extension LocalizedBody on Event {
 | 
			
		||||
    // Hide reply fallback
 | 
			
		||||
    if (hideReply) {
 | 
			
		||||
      localizedBody = localizedBody.replaceFirst(
 | 
			
		||||
          RegExp(
 | 
			
		||||
              r'^>( \*)? <@[a-zA-Z0-9-.=_\/]+:[^>]+>[^\n]+\r?\n(> [^\n]+\r?\n)*\r?\n'),
 | 
			
		||||
          "");
 | 
			
		||||
          RegExp(r'^>( \*)? <[^>]+>[^\n\r]+\r?\n(> [^\n]*\r?\n)*\r?\n'), "");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Add the sender name prefix
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@ class AppInfo extends StatelessWidget {
 | 
			
		||||
    Client client = Matrix.of(context).client;
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        title: Text("About FluffyChat"),
 | 
			
		||||
        title: Text(I18n.of(context).accountInformations),
 | 
			
		||||
      ),
 | 
			
		||||
      body: ListView(
 | 
			
		||||
        children: <Widget>[
 | 
			
		||||
 | 
			
		||||
@ -419,7 +419,6 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                      ),
 | 
			
		||||
                      Divider(height: 1),
 | 
			
		||||
                      widget.room.canInvite
 | 
			
		||||
                          ? ListTile(
 | 
			
		||||
                              title: Text(I18n.of(context).inviteContact),
 | 
			
		||||
 | 
			
		||||
@ -315,7 +315,7 @@ class _ChatListState extends State<ChatList> {
 | 
			
		||||
                      ? Material(
 | 
			
		||||
                          elevation: 2,
 | 
			
		||||
                          child: ListTile(
 | 
			
		||||
                            title: Text("Public Rooms:"),
 | 
			
		||||
                            title: Text(I18n.of(context).publicRooms),
 | 
			
		||||
                          ),
 | 
			
		||||
                        )
 | 
			
		||||
                      : Divider(indent: 70, height: 1),
 | 
			
		||||
 | 
			
		||||
@ -1,35 +0,0 @@
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:fluffychat/components/matrix.dart';
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:url_launcher/url_launcher.dart';
 | 
			
		||||
import 'package:webview_flutter/webview_flutter.dart';
 | 
			
		||||
 | 
			
		||||
class ContentWebView extends StatelessWidget {
 | 
			
		||||
  final MxContent content;
 | 
			
		||||
 | 
			
		||||
  const ContentWebView(this.content);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    final String url = content.getDownloadLink(Matrix.of(context).client);
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        title: Text(
 | 
			
		||||
          I18n.of(context).contentViewer,
 | 
			
		||||
        ),
 | 
			
		||||
        actions: <Widget>[
 | 
			
		||||
          IconButton(
 | 
			
		||||
            icon: Icon(
 | 
			
		||||
              Icons.file_download,
 | 
			
		||||
            ),
 | 
			
		||||
            onPressed: () => launch(url),
 | 
			
		||||
          ),
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
      body: WebView(
 | 
			
		||||
        initialUrl: url,
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -2,7 +2,6 @@ import 'package:cached_network_image/cached_network_image.dart';
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:fluffychat/components/matrix.dart';
 | 
			
		||||
import 'package:fluffychat/utils/app_route.dart';
 | 
			
		||||
import 'package:flutter/foundation.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:photo_view/photo_view.dart';
 | 
			
		||||
import 'package:url_launcher/url_launcher.dart';
 | 
			
		||||
@ -13,15 +12,11 @@ class ImageViewer extends StatelessWidget {
 | 
			
		||||
  const ImageViewer(this.mxContent);
 | 
			
		||||
 | 
			
		||||
  static show(BuildContext context, MxContent content) {
 | 
			
		||||
    if (kIsWeb) {
 | 
			
		||||
      launch(content.getDownloadLink(Matrix.of(context).client));
 | 
			
		||||
    } else {
 | 
			
		||||
      Navigator.of(context).push(
 | 
			
		||||
        AppRoute(
 | 
			
		||||
          ImageViewer(content),
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    Navigator.of(context).push(
 | 
			
		||||
      AppRoute(
 | 
			
		||||
        ImageViewer(content),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
@ -29,6 +24,9 @@ class ImageViewer extends StatelessWidget {
 | 
			
		||||
    final String url = mxContent.getDownloadLink(Matrix.of(context).client);
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        brightness: Brightness.dark,
 | 
			
		||||
        backgroundColor: Colors.black,
 | 
			
		||||
        iconTheme: IconThemeData(color: Colors.white),
 | 
			
		||||
        actions: <Widget>[
 | 
			
		||||
          IconButton(
 | 
			
		||||
            icon: Icon(Icons.file_download),
 | 
			
		||||
 | 
			
		||||
@ -123,7 +123,7 @@ class _InvitationSelectionState extends State<InvitationSelection> {
 | 
			
		||||
          appBar: AppBar(
 | 
			
		||||
            title: Text(I18n.of(context).inviteContact),
 | 
			
		||||
            bottom: PreferredSize(
 | 
			
		||||
              preferredSize: Size.fromHeight(68),
 | 
			
		||||
              preferredSize: Size.fromHeight(92),
 | 
			
		||||
              child: Padding(
 | 
			
		||||
                padding: const EdgeInsets.all(16.0),
 | 
			
		||||
                child: TextField(
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
import 'package:fluffychat/components/adaptive_page_layout.dart';
 | 
			
		||||
import 'package:fluffychat/components/matrix.dart';
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
import 'package:fluffychat/utils/app_route.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:pedantic/pedantic.dart';
 | 
			
		||||
 | 
			
		||||
@ -47,11 +48,11 @@ class _NewGroupState extends State<_NewGroup> {
 | 
			
		||||
    Navigator.of(context).pop();
 | 
			
		||||
    if (roomID != null) {
 | 
			
		||||
      unawaited(
 | 
			
		||||
        Navigator.push(
 | 
			
		||||
          context,
 | 
			
		||||
          MaterialPageRoute(builder: (context) {
 | 
			
		||||
            return ChatView(roomID);
 | 
			
		||||
          }),
 | 
			
		||||
        Navigator.of(context).push(
 | 
			
		||||
          AppRoute.defaultRoute(
 | 
			
		||||
            context,
 | 
			
		||||
            ChatView(roomID),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
      await Navigator.push(
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,7 @@ import 'package:fluffychat/components/adaptive_page_layout.dart';
 | 
			
		||||
import 'package:fluffychat/components/avatar.dart';
 | 
			
		||||
import 'package:fluffychat/components/matrix.dart';
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
import 'package:fluffychat/utils/app_route.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:share/share.dart';
 | 
			
		||||
 | 
			
		||||
@ -58,9 +59,11 @@ class _NewPrivateChatState extends State<_NewPrivateChat> {
 | 
			
		||||
    Navigator.of(context).pop();
 | 
			
		||||
 | 
			
		||||
    if (roomID != null) {
 | 
			
		||||
      await Navigator.push(
 | 
			
		||||
        context,
 | 
			
		||||
        MaterialPageRoute(builder: (context) => ChatView(roomID)),
 | 
			
		||||
      await Navigator.of(context).push(
 | 
			
		||||
        AppRoute.defaultRoute(
 | 
			
		||||
          context,
 | 
			
		||||
          ChatView(roomID),
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
import 'dart:io';
 | 
			
		||||
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:fluffychat/components/settings_themes.dart';
 | 
			
		||||
import 'package:fluffychat/views/settings_devices.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:image_picker/image_picker.dart';
 | 
			
		||||
@ -9,10 +10,9 @@ import 'package:url_launcher/url_launcher.dart';
 | 
			
		||||
 | 
			
		||||
import 'app_info.dart';
 | 
			
		||||
import 'chat_list.dart';
 | 
			
		||||
import 'settings_themes.dart';
 | 
			
		||||
import '../components/adaptive_page_layout.dart';
 | 
			
		||||
import 'sign_up.dart';
 | 
			
		||||
import '../components/dialogs/simple_dialogs.dart';
 | 
			
		||||
import '../components/adaptive_page_layout.dart';
 | 
			
		||||
import '../components/content_banner.dart';
 | 
			
		||||
import '../components/matrix.dart';
 | 
			
		||||
import '../i18n/i18n.dart';
 | 
			
		||||
@ -132,6 +132,17 @@ class _SettingsState extends State<Settings> {
 | 
			
		||||
        ],
 | 
			
		||||
        body: ListView(
 | 
			
		||||
          children: <Widget>[
 | 
			
		||||
            ListTile(
 | 
			
		||||
              title: Text(
 | 
			
		||||
                I18n.of(context).changeTheme,
 | 
			
		||||
                style: TextStyle(
 | 
			
		||||
                  color: Theme.of(context).primaryColor,
 | 
			
		||||
                  fontWeight: FontWeight.bold,
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
            ThemesSettings(),
 | 
			
		||||
            Divider(thickness: 1),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              title: Text(
 | 
			
		||||
                I18n.of(context).account,
 | 
			
		||||
@ -147,16 +158,6 @@ class _SettingsState extends State<Settings> {
 | 
			
		||||
              subtitle: Text(profile?.displayname ?? client.userID.localpart),
 | 
			
		||||
              onTap: () => setDisplaynameAction(context),
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              trailing: Icon(Icons.color_lens),
 | 
			
		||||
              title: Text(I18n.of(context).changeTheme),
 | 
			
		||||
              onTap: () async => await Navigator.of(context).push(
 | 
			
		||||
                AppRoute.defaultRoute(
 | 
			
		||||
                  context,
 | 
			
		||||
                  ThemesSettingsView(),
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              trailing: Icon(Icons.devices_other),
 | 
			
		||||
              title: Text(I18n.of(context).devices),
 | 
			
		||||
@ -167,6 +168,16 @@ class _SettingsState extends State<Settings> {
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              trailing: Icon(Icons.account_circle),
 | 
			
		||||
              title: Text(I18n.of(context).accountInformations),
 | 
			
		||||
              onTap: () => Navigator.of(context).push(
 | 
			
		||||
                AppRoute.defaultRoute(
 | 
			
		||||
                  context,
 | 
			
		||||
                  AppInfoView(),
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              trailing: Icon(Icons.exit_to_app),
 | 
			
		||||
              title: Text(I18n.of(context).logout),
 | 
			
		||||
@ -190,7 +201,7 @@ class _SettingsState extends State<Settings> {
 | 
			
		||||
              onTap: () => launch("https://ko-fi.com/V7V315112"),
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              leading: Icon(Icons.donut_large),
 | 
			
		||||
              leading: Icon(Icons.local_atm),
 | 
			
		||||
              title: Text("Liberapay " + I18n.of(context).donate),
 | 
			
		||||
              onTap: () =>
 | 
			
		||||
                  launch("https://liberapay.com/KrilleChritzelius/donate"),
 | 
			
		||||
@ -201,16 +212,6 @@ class _SettingsState extends State<Settings> {
 | 
			
		||||
              onTap: () => launch(
 | 
			
		||||
                  "https://gitlab.com/ChristianPauly/fluffychat-flutter/issues"),
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              leading: Icon(Icons.account_circle),
 | 
			
		||||
              title: Text(I18n.of(context).accountInformations),
 | 
			
		||||
              onTap: () => Navigator.of(context).push(
 | 
			
		||||
                AppRoute.defaultRoute(
 | 
			
		||||
                  context,
 | 
			
		||||
                  AppInfoView(),
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
            ListTile(
 | 
			
		||||
              leading: Icon(Icons.list),
 | 
			
		||||
              title: Text(I18n.of(context).changelog),
 | 
			
		||||
 | 
			
		||||
@ -1,105 +0,0 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
import '../components/theme_switcher.dart';
 | 
			
		||||
import '../components/adaptive_page_layout.dart';
 | 
			
		||||
import '../components/matrix.dart';
 | 
			
		||||
import '../i18n/i18n.dart';
 | 
			
		||||
import 'chat_list.dart';
 | 
			
		||||
 | 
			
		||||
class ThemesSettingsView extends StatelessWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return AdaptivePageLayout(
 | 
			
		||||
      primaryPage: FocusPage.SECOND,
 | 
			
		||||
      firstScaffold: ChatList(),
 | 
			
		||||
      secondScaffold: ThemesSettings(),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class ThemesSettings extends StatefulWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  ThemesSettingsState createState() => ThemesSettingsState();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class ThemesSettingsState extends State<ThemesSettings> {
 | 
			
		||||
  Themes _selectedTheme;
 | 
			
		||||
  bool _amoledEnabled;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    final ThemeSwitcherWidgetState themeEngine =
 | 
			
		||||
        ThemeSwitcherWidget.of(context);
 | 
			
		||||
    _selectedTheme = themeEngine.selectedTheme;
 | 
			
		||||
    _amoledEnabled = themeEngine.amoledEnabled;
 | 
			
		||||
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(
 | 
			
		||||
        title: Text(I18n.of(context).changeTheme),
 | 
			
		||||
      ),
 | 
			
		||||
      body: Column(
 | 
			
		||||
        children: <Widget>[
 | 
			
		||||
          RadioListTile<Themes>(
 | 
			
		||||
            title: Text(
 | 
			
		||||
              I18n.of(context).systemTheme,
 | 
			
		||||
            ),
 | 
			
		||||
            value: Themes.system,
 | 
			
		||||
            groupValue: _selectedTheme,
 | 
			
		||||
            activeColor: Theme.of(context).primaryColor,
 | 
			
		||||
            onChanged: (Themes value) {
 | 
			
		||||
              setState(() {
 | 
			
		||||
                _selectedTheme = value;
 | 
			
		||||
                themeEngine.switchTheme(matrix, value, _amoledEnabled);
 | 
			
		||||
              });
 | 
			
		||||
            },
 | 
			
		||||
          ),
 | 
			
		||||
          RadioListTile<Themes>(
 | 
			
		||||
            title: Text(
 | 
			
		||||
              I18n.of(context).lightTheme,
 | 
			
		||||
            ),
 | 
			
		||||
            value: Themes.light,
 | 
			
		||||
            groupValue: _selectedTheme,
 | 
			
		||||
            activeColor: Theme.of(context).primaryColor,
 | 
			
		||||
            onChanged: (Themes value) {
 | 
			
		||||
              setState(() {
 | 
			
		||||
                _selectedTheme = value;
 | 
			
		||||
                themeEngine.switchTheme(matrix, value, _amoledEnabled);
 | 
			
		||||
              });
 | 
			
		||||
            },
 | 
			
		||||
          ),
 | 
			
		||||
          RadioListTile<Themes>(
 | 
			
		||||
            title: Text(
 | 
			
		||||
              I18n.of(context).darkTheme,
 | 
			
		||||
            ),
 | 
			
		||||
            value: Themes.dark,
 | 
			
		||||
            groupValue: _selectedTheme,
 | 
			
		||||
            activeColor: Theme.of(context).primaryColor,
 | 
			
		||||
            onChanged: (Themes value) {
 | 
			
		||||
              setState(() {
 | 
			
		||||
                _selectedTheme = value;
 | 
			
		||||
                themeEngine.switchTheme(matrix, value, _amoledEnabled);
 | 
			
		||||
              });
 | 
			
		||||
            },
 | 
			
		||||
          ),
 | 
			
		||||
          Divider(thickness: 1),
 | 
			
		||||
          ListTile(
 | 
			
		||||
            title: Text(
 | 
			
		||||
              I18n.of(context).useAmoledTheme,
 | 
			
		||||
            ),
 | 
			
		||||
            trailing: Switch(
 | 
			
		||||
              value: _amoledEnabled,
 | 
			
		||||
              activeColor: Theme.of(context).primaryColor,
 | 
			
		||||
              onChanged: (bool value) {
 | 
			
		||||
                setState(() {
 | 
			
		||||
                  _amoledEnabled = value;
 | 
			
		||||
                  themeEngine.switchTheme(matrix, _selectedTheme, value);
 | 
			
		||||
                });
 | 
			
		||||
              },
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user