Skip to content
Snippets Groups Projects
Commit 8f0018e3 authored by poka's avatar poka
Browse files

New history screen

parent bd87ea5a
No related branches found
No related tags found
No related merge requests found
Pipeline #14214 waiting for manual action
......@@ -69,7 +69,8 @@ Future<void> main() async {
// await HiveStore.open(path: '${appPath.path}/gqlCache');
// Get a valid GVA endpoint
endPointGVA = 'https://g1.librelois.fr/gva';
// endPointGVA = 'https://g1.librelois.fr/gva';
endPointGVA = 'https://duniter-g1.p2p.legal/gva';
// await _homeProvider.getValidEndpoint();
// if (endPointGVA == 'HS') {
......
......@@ -79,6 +79,10 @@ class CesiumPlusProvider with ChangeNotifier {
}
Future<Image> getAvatar(String _pubkey, double size) async {
if (g1WalletsBox.get(_pubkey).avatar != null) {
return g1WalletsBox.get(_pubkey).avatar;
}
List queryOptions = await _buildQuery(_pubkey);
http.Response response;
......
......@@ -21,7 +21,7 @@ class HomeProvider with ChangeNotifier {
Widget appBarExplorer =
Text('Explorateur', style: TextStyle(color: Colors.grey[850]));
List currentTab = [HistoryScreen(), WalletsHome()];
List currentTab = [OldHistoryScreen(), WalletsHome()];
bool isFirstBuild = true;
// AudioCache player = AudioCache(prefix: 'sounds/');
......
......@@ -19,7 +19,7 @@ class SearchProvider with ChangeNotifier {
searchResult.clear();
int searchTime = DateTime.now().millisecondsSinceEpoch;
if (cacheTime + 0 <= searchTime) {
if (cacheTime + cacheDuring <= searchTime) {
g1WalletsBox.clear();
final url = Uri.parse('https://g1-stats.axiom-team.fr/data/forbes.json');
final response = await http.get(url);
......
import 'dart:convert';
import 'package:dubp/dubp.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
......@@ -14,6 +16,7 @@ import 'package:intl/intl.dart';
import 'package:truncate/truncate.dart';
import 'package:crypto/crypto.dart';
import 'package:fast_base58/fast_base58.dart';
import 'package:http/http.dart' as http;
class WalletsProfilesProvider with ChangeNotifier {
WalletsProfilesProvider(this.pubkey);
......@@ -254,4 +257,20 @@ class WalletsProfilesProvider with ChangeNotifier {
String generateIdenticon(String _pubkey) {
return Jdenticon.toSvg(_pubkey);
}
Future<num> getBalance(String _pubkey) async {
num balance;
final url = Uri.parse(
'$endPointGVA?query={%20balance(script:%20%22$_pubkey%22)%20{%20amount%20base%20}%20}');
final response = await http.get(url);
final result = json.decode(response.body);
if (result['data']['balance'] == null) {
balance = 0.0;
} else {
balance = removeDecimalZero(result['data']['balance']['amount'] / 100);
}
return balance;
}
}
This diff is collapsed.
......@@ -16,7 +16,7 @@ import 'package:provider/provider.dart';
import 'package:flutter_svg/flutter_svg.dart';
// ignore: must_be_immutable
class HistoryScreen extends StatelessWidget with ChangeNotifier {
class OldHistoryScreen extends StatelessWidget with ChangeNotifier {
final TextEditingController _outputPubkey = TextEditingController();
ScrollController scrollController = ScrollController();
final nRepositories = 20;
......@@ -29,7 +29,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
FetchMoreOptions opts;
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
HistoryScreen({Key key}) : super(key: key);
OldHistoryScreen({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
......
......@@ -14,9 +14,10 @@ class SearchResultScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
SearchProvider _searchProvider = Provider.of<SearchProvider>(context);
SearchProvider _searchProvider =
Provider.of<SearchProvider>(context, listen: false);
CesiumPlusProvider _cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context);
Provider.of<CesiumPlusProvider>(context, listen: false);
WalletsProfilesProvider _walletsProfilesClass =
Provider.of<WalletsProfilesProvider>(context, listen: false);
......
......@@ -5,8 +5,9 @@ import 'package:flutter/material.dart';
import 'package:gecko/models/cesium_plus.dart';
import 'package:gecko/models/wallets_profiles.dart';
import 'package:gecko/models/queries.dart';
// import 'package:gecko/models/wallet_options.dart';
import 'package:gecko/screens/avatar_fullscreen.dart';
import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/history.dart';
import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:provider/provider.dart';
......@@ -21,11 +22,9 @@ class WalletViewScreen extends StatelessWidget {
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
WalletsProfilesProvider _historyProvider =
Provider.of<WalletsProfilesProvider>(context);
Provider.of<WalletsProfilesProvider>(context, listen: false);
CesiumPlusProvider _cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context);
// WalletOptionsProvider _walletOptions = WalletOptionsProvider();
double _avatarSize = 150;
Provider.of<CesiumPlusProvider>(context, listen: false);
return Scaffold(
appBar: AppBar(
......@@ -65,172 +64,7 @@ class WalletViewScreen extends StatelessWidget {
),
body: SafeArea(
child: Column(children: <Widget>[
Container(
height: 10,
color: yellowC,
),
Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
yellowC,
const Color(0xFFE7811A),
],
)),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 30),
child: Row(children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(children: [
GestureDetector(
key: const Key('copyPubkey'),
onTap: () {
Clipboard.setData(ClipboardData(
text: pubkey ?? _historyProvider.pubkey));
_historyProvider.snackCopyKey(context);
},
child: Text(
_historyProvider.getShortPubkey(
pubkey ?? _historyProvider.pubkey),
style: const TextStyle(
fontSize: 30,
fontWeight: FontWeight.w800,
),
),
),
]),
const SizedBox(height: 10),
if (username == null)
Query(
options: QueryOptions(
document: gql(getId),
variables: {
'pubkey': _historyProvider.pubkey,
},
),
builder: (QueryResult result,
{VoidCallback refetch, FetchMore fetchMore}) {
if (result.isLoading || result.hasException) {
return const Text('...');
} else if (result.data['idty'] == null ||
result.data['idty']['username'] == null) {
return const Text('');
} else {
return SizedBox(
width: 230,
child: Text(
result?.data['idty']['username'] ?? '',
style: const TextStyle(
fontSize: 27,
color: Color(0xff814C00),
),
),
);
}
},
),
if (username != null)
Text(
username,
style: const TextStyle(
fontSize: 27,
color: Color(0xff814C00),
),
),
const SizedBox(height: 25),
FutureBuilder(
future: _cesiumPlusProvider
.getName(_historyProvider.pubkey),
initialData: '...',
builder: (context, snapshot) {
return SizedBox(
width: 230,
child: Text(
snapshot.data ?? '-',
style: const TextStyle(
fontSize: 18, color: Colors.black),
),
);
}),
const SizedBox(height: 30),
]),
const Spacer(),
Column(children: <Widget>[
if (avatar == null)
FutureBuilder(
future: _cesiumPlusProvider.getAvatar(
_historyProvider.pubkey, _avatarSize),
builder: (BuildContext context,
AsyncSnapshot<Image> _avatar) {
if (_avatar.connectionState !=
ConnectionState.done ||
_avatar.hasError) {
return Stack(children: [
ClipOval(
child: _cesiumPlusProvider
.defaultAvatar(_avatarSize),
),
Positioned(
top: 16.5,
right: 47.5,
width: 55,
height: 55,
child: CircularProgressIndicator(
strokeWidth: 6,
color: orangeC,
),
),
]);
}
if (_avatar.hasData) {
return GestureDetector(
key: const Key('openAvatar'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return AvatarFullscreen(_avatar.data);
}),
);
},
child: ClipOval(
child: _avatar.data,
),
);
}
return ClipOval(
child: _cesiumPlusProvider
.defaultAvatar(_avatarSize),
);
}),
if (avatar != null)
GestureDetector(
key: const Key('openAvatar'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return AvatarFullscreen(avatar);
}),
);
},
child: ClipOval(
child: Image(
image: avatar.image,
height: _avatarSize,
fit: BoxFit.cover,
),
),
),
const SizedBox(height: 25),
]),
]),
),
),
headerProfileView(context, _historyProvider, _cesiumPlusProvider),
SizedBox(height: isTall ? 60 : 30),
Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [
Column(children: <Widget>[
......@@ -249,7 +83,16 @@ class WalletViewScreen extends StatelessWidget {
'assets/walletOptions/clock.png'),
height: 90)),
onTap: () {
null;
Navigator.push(
context,
FaderTransition(
page: HistoryScreen(
pubkey: pubkey ?? _historyProvider.pubkey,
username: username,
avatar: avatar,
),
isFast: false),
);
}),
),
),
......@@ -352,4 +195,176 @@ class WalletViewScreen extends StatelessWidget {
]),
));
}
Widget headerProfileView(
BuildContext context,
WalletsProfilesProvider _historyProvider,
CesiumPlusProvider _cesiumPlusProvider) {
const double _avatarSize = 140;
return Column(children: <Widget>[
Container(
height: 10,
color: yellowC,
),
Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
yellowC,
const Color(0xFFE7811A),
],
)),
child: Padding(
padding: const EdgeInsets.only(left: 30, right: 40),
child: Row(children: <Widget>[
Column(crossAxisAlignment: CrossAxisAlignment.start, children: <
Widget>[
Row(children: [
GestureDetector(
key: const Key('copyPubkey'),
onTap: () {
Clipboard.setData(
ClipboardData(text: pubkey ?? _historyProvider.pubkey));
_historyProvider.snackCopyKey(context);
},
child: Text(
_historyProvider
.getShortPubkey(pubkey ?? _historyProvider.pubkey),
style: const TextStyle(
fontSize: 30,
fontWeight: FontWeight.w800,
),
),
),
]),
const SizedBox(height: 10),
if (username == null)
Query(
options: QueryOptions(
document: gql(getId),
variables: {
'pubkey': _historyProvider.pubkey,
},
),
builder: (QueryResult result,
{VoidCallback refetch, FetchMore fetchMore}) {
if (result.isLoading || result.hasException) {
return const Text('...');
} else if (result.data['idty'] == null ||
result.data['idty']['username'] == null) {
return const Text('');
} else {
return SizedBox(
width: 230,
child: Text(
result?.data['idty']['username'] ?? '',
style: const TextStyle(
fontSize: 27,
color: Color(0xff814C00),
),
),
);
}
},
),
if (username != null)
Text(
username,
style: const TextStyle(
fontSize: 27,
color: Color(0xff814C00),
),
),
const SizedBox(height: 25),
FutureBuilder(
future: _cesiumPlusProvider.getName(_historyProvider.pubkey),
initialData: '...',
builder: (context, snapshot) {
return SizedBox(
width: 230,
child: Text(
snapshot.data ?? '-',
style:
const TextStyle(fontSize: 18, color: Colors.black),
),
);
}),
const SizedBox(height: 30),
]),
const Spacer(),
Column(children: <Widget>[
if (avatar == null)
FutureBuilder(
future: _cesiumPlusProvider.getAvatar(
_historyProvider.pubkey, _avatarSize),
builder:
(BuildContext context, AsyncSnapshot<Image> _avatar) {
if (_avatar.connectionState != ConnectionState.done ||
_avatar.hasError) {
return Stack(children: [
ClipOval(
child:
_cesiumPlusProvider.defaultAvatar(_avatarSize),
),
Positioned(
top: 16.5,
right: 47.5,
width: 55,
height: 55,
child: CircularProgressIndicator(
strokeWidth: 6,
color: orangeC,
),
),
]);
}
if (_avatar.hasData) {
return GestureDetector(
key: const Key('openAvatar'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return AvatarFullscreen(_avatar.data);
}),
);
},
child: ClipOval(
child: _avatar.data,
),
);
}
return ClipOval(
child: _cesiumPlusProvider.defaultAvatar(_avatarSize),
);
}),
if (avatar != null)
GestureDetector(
key: const Key('openAvatar'),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
return AvatarFullscreen(avatar);
}),
);
},
child: ClipOval(
child: Image(
image: avatar.image,
height: _avatarSize,
fit: BoxFit.cover,
),
),
),
const SizedBox(height: 25),
]),
]),
),
),
]);
}
}
......@@ -885,6 +885,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
pull_to_refresh:
dependency: "direct main"
description:
name: pull_to_refresh
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
qr:
dependency: transitive
description:
......
......@@ -5,7 +5,7 @@ description: Pay with G1.
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 0.0.3+9
version: 0.0.3+10
environment:
sdk: ">=2.7.0 <3.0.0"
......@@ -56,6 +56,7 @@ dependencies:
truncate: ^3.0.1
unorm_dart: ^0.2.0
xml: ^5.3.0
pull_to_refresh: ^2.0.0
flutter_icons:
android: "ic_launcher"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment