diff --git a/assets/loupe-noire.png b/assets/loupe-noire.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8773daed29701653cfd986c341ee483c24953e Binary files /dev/null and b/assets/loupe-noire.png differ diff --git a/lib/main.dart b/lib/main.dart index 9ad437f66ee0f8c6f215d9cb12be5560b0640ba3..a04f5aad98bd58713552a1e3d2189bfbc6166fb4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -27,6 +27,7 @@ import 'package:gecko/models/generate_wallets.dart'; import 'package:gecko/models/history.dart'; import 'package:gecko/models/home.dart'; import 'package:gecko/models/my_wallets.dart'; +import 'package:gecko/models/search.dart'; import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_options.dart'; import 'package:gecko/screens/home.dart'; @@ -141,6 +142,7 @@ class Gecko extends StatelessWidget { ChangeNotifierProvider(create: (_) => GenerateWalletsProvider()), ChangeNotifierProvider(create: (_) => WalletOptionsProvider()), ChangeNotifierProvider(create: (_) => ChangePinProvider()), + ChangeNotifierProvider(create: (_) => SearchProvider()), ChangeNotifierProvider(create: (_) => CesiumPlusProvider()) ], child: GraphQLProvider( diff --git a/lib/models/history.dart b/lib/models/history.dart index 9639cb4669eb2fe46f084300ed0a5748b020e54d..0d6294d89233dad717df7d1c492438f086021de9 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -2,14 +2,12 @@ import 'package:dubp/dubp.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; -import 'package:gecko/models/home.dart'; import 'package:gecko/models/my_wallets.dart'; import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/screens/history.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:jdenticon_dart/jdenticon_dart.dart'; import 'package:permission_handler/permission_handler.dart'; -import 'package:provider/provider.dart'; import 'package:qrscan/qrscan.dart' as scanner; import 'dart:math'; import 'package:intl/intl.dart'; @@ -74,8 +72,6 @@ class HistoryProvider with ChangeNotifier { } String isPubkey(context, pubkey, {bool goHistory}) { - HomeProvider _homeProvider = - Provider.of<HomeProvider>(context, listen: false); final RegExp regExp = RegExp( r'^[a-zA-Z0-9]+$', caseSensitive: false, @@ -102,7 +98,6 @@ class HistoryProvider with ChangeNotifier { historySwitchButtun = "Voir l'historique"; } - _homeProvider.handleSearchEnd(); Navigator.push( context, MaterialPageRoute(builder: (context) { diff --git a/lib/models/my_wallets.dart b/lib/models/my_wallets.dart index cf953499ce19b8c100f0f3f380a0f76df0e33286..e8a6305a3c1524bf6ed8b11d6515d7036fa8c6cb 100644 --- a/lib/models/my_wallets.dart +++ b/lib/models/my_wallets.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'dart:async'; import 'package:gecko/globals.dart'; import 'package:gecko/models/wallet_data.dart'; -import 'package:gecko/screens/home.dart'; class MyWalletsProvider with ChangeNotifier { List<WalletData> listWallets = []; diff --git a/lib/models/queries.dart b/lib/models/queries.dart index 72ba0e9e90d9547ec4118edb227975900a726032..4644a770104141719695d7d66d482e1add4c5d47 100644 --- a/lib/models/queries.dart +++ b/lib/models/queries.dart @@ -62,3 +62,27 @@ const String getBalance = r''' } } '''; + +const String getWallets = r''' +query ($number: Int!, $cursor: String) { + wallets(pagination: {ord: ASC, pageSize: $number, cursor: $cursor}) { + pageInfo { + hasNextPage + endCursor + } + edges { + node { + script + balance { + amount + base + } + idty { + isMember + username + } + } + } + } +} +'''; diff --git a/lib/models/search.dart b/lib/models/search.dart new file mode 100644 index 0000000000000000000000000000000000000000..eaa1beb76db333200c4759b3ffd68409dad9cb37 --- /dev/null +++ b/lib/models/search.dart @@ -0,0 +1,12 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +class SearchProvider with ChangeNotifier { + TextEditingController searchController = TextEditingController(); + + void rebuildWidget() { + notifyListeners(); + } + + void searchPubkey() {} +} diff --git a/lib/screens/home.dart b/lib/screens/home.dart index f50503535fb3aaaad7500ad1234795c035225eaf..eff093ffcffe68ff7fc2f9ff30a691003b53c2b7 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -10,6 +10,7 @@ import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/screens/myWallets/restore_chest.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:gecko/screens/onBoarding/1.dart'; +import 'package:gecko/screens/search.dart'; import 'dart:ui'; import 'package:gecko/screens/settings.dart'; import 'package:flutter/services.dart'; @@ -205,18 +206,18 @@ Widget geckHome(context) { color: orangeC, // button color child: InkWell( child: const Padding( - padding: EdgeInsets.all(18), - child: Image( - image: AssetImage('assets/home/loupe.png'), - height: 70)), + padding: EdgeInsets.all(18), + child: Image( + image: AssetImage('assets/home/loupe.png'), + height: 70), + ), onTap: () { - // Navigator.push( - // context, - // MaterialPageRoute( - // builder: (context) { - // return TemplateScreen(); - // }), - // ); + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const SearchScreen(); + }), + ); }), ), ), diff --git a/lib/screens/myWallets/confirm_wallet_storage.dart b/lib/screens/myWallets/confirm_wallet_storage.dart index ef743245caef14af3c61563f2d3747d8741be5a0..fe7dc15d217888648f88311a01e98e256cdbd285 100644 --- a/lib/screens/myWallets/confirm_wallet_storage.dart +++ b/lib/screens/myWallets/confirm_wallet_storage.dart @@ -6,7 +6,6 @@ import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/generate_wallets.dart'; import 'package:gecko/models/my_wallets.dart'; -import 'package:gecko/models/wallet_options.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:provider/provider.dart'; @@ -33,8 +32,6 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { Provider.of<GenerateWalletsProvider>(context); MyWalletsProvider _myWalletProvider = Provider.of<MyWalletsProvider>(context); - WalletOptionsProvider _walletOptions = - Provider.of<WalletOptionsProvider>(context); final int _currentChest = _myWalletProvider.getCurrentChest(); _mnemonicController.text = generatedMnemonic; diff --git a/lib/screens/search.dart b/lib/screens/search.dart new file mode 100644 index 0000000000000000000000000000000000000000..39e43374f2f75bccfb1849a3c95ea9fe70d5fc60 --- /dev/null +++ b/lib/screens/search.dart @@ -0,0 +1,109 @@ +import 'package:flutter/services.dart'; +import 'package:gecko/globals.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/models/search.dart'; +import 'package:gecko/screens/search_result.dart'; +import 'package:provider/provider.dart'; +// import 'package:gecko/models/home.dart'; +// import 'package:provider/provider.dart'; + +class SearchScreen extends StatelessWidget { + const SearchScreen({Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + SearchProvider _searchProvider = Provider.of<SearchProvider>(context); + + return WillPopScope( + onWillPop: () { + _searchProvider.searchController.text = ''; + return Future<bool>.value(true); + }, + child: Scaffold( + appBar: AppBar( + toolbarHeight: 60 * ratio, + title: const SizedBox( + height: 22, + child: Text('Rechercher'), + ), + leading: IconButton( + icon: const Icon(Icons.arrow_back, color: Colors.black), + onPressed: () { + _searchProvider.searchController.text = ''; + Navigator.of(context).pop(); + }), + ), + body: SafeArea( + child: Column(children: <Widget>[ + SizedBox(height: isTall ? 200 : 100), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 17), + child: TextField( + controller: _searchProvider.searchController, + autofocus: true, + maxLines: 1, + textAlign: TextAlign.left, + onChanged: (v) => _searchProvider.rebuildWidget(), + decoration: InputDecoration( + filled: true, + fillColor: Colors.white, + prefixIconConstraints: const BoxConstraints( + minHeight: 32, + ), + prefixIcon: const Padding( + padding: EdgeInsets.symmetric(horizontal: 17), + child: Image( + image: AssetImage('assets/loupe-noire.png'), + height: 35), + ), + border: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.grey[500], width: 2), + borderRadius: BorderRadius.circular(8)), + focusedBorder: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.grey[500], width: 2.5), + borderRadius: BorderRadius.circular(8), + ), + contentPadding: const EdgeInsets.all(20), + ), + style: const TextStyle( + fontSize: 20, + color: Colors.black, + fontWeight: FontWeight.w400, + ), + ), + ), + const Spacer(flex: 1), + SizedBox( + width: 410, + height: 70, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 4, + primary: orangeC, // background + onPrimary: Colors.white, // foreground + ), + onPressed: _searchProvider.searchController.text.length >= 2 + ? () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const SearchResultScreen(); + }), + ); + } + : null, + child: const Text( + 'Rechercher', + style: TextStyle(fontSize: 24, fontWeight: FontWeight.w600), + ), + ), + ), + const Spacer(flex: 1), + ]), + ), + )); + } +} diff --git a/lib/screens/search_result.dart b/lib/screens/search_result.dart new file mode 100644 index 0000000000000000000000000000000000000000..5c399989ba2ee6a1434200a4aedac4b81aa07d73 --- /dev/null +++ b/lib/screens/search_result.dart @@ -0,0 +1,45 @@ +import 'package:flutter/services.dart'; +import 'package:gecko/globals.dart'; +import 'package:flutter/material.dart'; +import 'package:gecko/models/search.dart'; +import 'package:provider/provider.dart'; + +class SearchResultScreen extends StatelessWidget { + const SearchResultScreen({Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + SearchProvider _searchProvider = Provider.of<SearchProvider>(context); + int nbrResult = 0; + + return Scaffold( + appBar: AppBar( + toolbarHeight: 60 * ratio, + title: const SizedBox( + height: 22, + child: Text('Résultats de votre recherche'), + ), + ), + body: SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: <Widget>[ + const SizedBox(height: 30), + Text( + '$nbrResult résultats pour "${_searchProvider.searchController.text}"', + style: TextStyle(fontSize: 18, color: Colors.grey[700]), + ), + const SizedBox(height: 40), + const Text( + 'Dans la blockchain Ğ1', + style: TextStyle(fontSize: 20), + ) + ]), + ), + ), + ); + } +} diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 4934d67548b6ee3b7e93d0321eac5508d1d35668..821106299d997088ee0443d601dee62aade21b59 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -1,13 +1,11 @@ import 'package:flutter/material.dart'; import 'package:dubp/dubp.dart'; import 'package:flutter/services.dart'; -import 'package:gecko/models/home.dart'; import 'package:gecko/models/my_wallets.dart'; import 'package:gecko/screens/myWallets/generate_wallets.dart'; import 'dart:io'; import 'package:gecko/screens/myWallets/import_cesium_wallet.dart'; import 'package:gecko/globals.dart'; -import 'package:provider/provider.dart'; // ignore: must_be_immutable class SettingsScreen extends StatelessWidget { @@ -29,7 +27,6 @@ class SettingsScreen extends StatelessWidget { @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - HomeProvider _homeProvider = Provider.of<HomeProvider>(context); // getAppDirectory(); return Scaffold(