From 6c4c2c4acdb764f00cbb92ec911de8bd3633cc75 Mon Sep 17 00:00:00 2001 From: Sergey Elpashev Date: Sun, 12 May 2024 13:42:05 +0300 Subject: [PATCH] Mobile example app --- lib/mobile_example.dart | 76 +++++++++++++++++++++++++++++++++++++++++ lib/providers/main.dart | 23 +++++++++++++ lib/states/mobile.dart | 34 +++++------------- pubspec.yaml | 1 + 4 files changed, 109 insertions(+), 25 deletions(-) create mode 100644 lib/mobile_example.dart create mode 100644 lib/providers/main.dart diff --git a/lib/mobile_example.dart b/lib/mobile_example.dart new file mode 100644 index 0000000..92ca64a --- /dev/null +++ b/lib/mobile_example.dart @@ -0,0 +1,76 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:gymlink_module_web/main_mobile.dart'; +import 'package:gymlink_module_web/providers/main.dart'; +import 'package:provider/provider.dart'; + +void main() { + runApp(const MyExampleApp()); +} + +class MyExampleApp extends StatelessWidget { + const MyExampleApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'GymLink Example App', + debugShowCheckedModeBanner: false, + home: ChangeNotifierProvider( + create: (_) => ModuleMethods(), + child: Consumer( + builder: (context, provider, __) => const ExamplePage(), + ), + ), + ); + } +} + +class ExamplePage extends StatefulWidget { + const ExamplePage({super.key}); + + @override + State createState() => _ExamplePageState(); +} + +class _ExamplePageState extends State { + @override + void initState() { + super.initState(); + context.read().onTokenReceived('token123'); + } + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (context, provider, __) => Scaffold( + appBar: AppBar(title: const Text('GymLink Example App')), + body: Column( + children: [ + const Text('test'), + IconButton( + icon: const Icon(Icons.abc), + onPressed: () { + provider.onTokenReceived('token123'); + }, + ), + const Expanded( + child: MyApp(), + ), + const SizedBox( + height: 20, + ), + const Text('Bottom text') + ], + ), + floatingActionButton: IconButton( + icon: const Icon(Icons.search), + onPressed: () { + provider.changeTheme(Random().nextInt(0xffffff + 1)); + }, + ), + ), + ); + } +} diff --git a/lib/providers/main.dart b/lib/providers/main.dart new file mode 100644 index 0000000..230cbfc --- /dev/null +++ b/lib/providers/main.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:gymlink_module_web/theme.dart'; + +class ModuleMethods with ChangeNotifier { + bool _isLoading = true; + bool get isLoading => _isLoading; + bool _blackTheme = false; + bool get blackTheme => _blackTheme; + ThemeData _theme = myTheme; + ThemeData get theme => _theme; + void onTokenReceived(String token) { + if (token == 'token123') { + _isLoading = false; + notifyListeners(); + } + } + + void changeTheme(int color) { + _blackTheme = !_blackTheme; + _theme = getThemeData(Color(color), _blackTheme); + notifyListeners(); + } +} diff --git a/lib/states/mobile.dart b/lib/states/mobile.dart index 6babbe2..6a6f5e6 100644 --- a/lib/states/mobile.dart +++ b/lib/states/mobile.dart @@ -1,35 +1,19 @@ import 'package:flutter/material.dart'; import 'package:gymlink_module_web/main_mobile.dart'; import 'package:gymlink_module_web/pages/main.dart'; -import 'package:gymlink_module_web/theme.dart'; +import 'package:gymlink_module_web/providers/main.dart'; +import 'package:provider/provider.dart'; class MyAppStateMobile extends State { - bool _isLoading = false; - ThemeData theme = myTheme; - bool black_theme = false; - @override Widget build(BuildContext context) { - return MaterialApp( - title: 'GymLink Module', - theme: theme, - debugShowCheckedModeBanner: false, - home: MainPage(isLoading: _isLoading), + return Consumer( + builder: (context, provider, __) => MaterialApp( + title: 'GymLink Module', + theme: provider.theme, + debugShowCheckedModeBanner: false, + home: MainPage(isLoading: provider.isLoading), + ), ); } - - void onTokenReceived(String token) { - if (token == 'token123') { - setState(() { - _isLoading = false; - }); - } - } - - void changeColor(int color) { - setState(() { - black_theme = !black_theme; //FIXME: TEMPORARY - theme = getThemeData(Color(color), black_theme); - }); - } } diff --git a/pubspec.yaml b/pubspec.yaml index 9ad645c..50b373c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -40,6 +40,7 @@ dependencies: flutter_markdown: ^0.7.1 http: ^1.2.1 universal_html: ^2.2.4 + provider: ^6.1.2 dev_dependencies: flutter_test: