forked from kherel/selfprivacy.org.app
parent
853e1fdbdd
commit
5e13112486
@ -0,0 +1,8 @@ |
||||
import 'package:get_it/get_it.dart'; |
||||
import 'package:selfprivacy/logic/get_it/console.dart'; |
||||
|
||||
final getIt = GetIt.instance; |
||||
|
||||
void getItSetup() { |
||||
getIt.registerSingleton<ConsoleModel>(ConsoleModelImplementation()); |
||||
} |
@ -1,11 +1,49 @@ |
||||
import 'package:dio/dio.dart'; |
||||
import 'package:selfprivacy/config/get_it_config.dart'; |
||||
import 'package:selfprivacy/logic/get_it/console.dart'; |
||||
import 'package:selfprivacy/logic/models/message.dart'; |
||||
|
||||
abstract class ApiMap { |
||||
String rootAddress; |
||||
|
||||
Dio client = Dio(); |
||||
// Dio client = Dio(); |
||||
|
||||
Dio loggedClient = Dio()..interceptors.add(ConsoleInterceptor()); |
||||
|
||||
void close() { |
||||
client.close(); |
||||
loggedClient.close(); |
||||
} |
||||
} |
||||
|
||||
class ConsoleInterceptor extends InterceptorsWrapper { |
||||
void addMessage(Message message) { |
||||
getIt.get<ConsoleModel>().addMessage(message); |
||||
} |
||||
|
||||
@override |
||||
Future onRequest(RequestOptions options) async { |
||||
addMessage( |
||||
Message( |
||||
text: |
||||
'request-uri: ${options.uri}\nheaders: ${options.headers}\ndata: ${options.data}', |
||||
), |
||||
); |
||||
return super.onRequest(options); |
||||
} |
||||
|
||||
@override |
||||
Future onResponse(Response response) async { |
||||
addMessage( |
||||
Message( |
||||
text: |
||||
'response-uri: ${response.request.uri}\ncode: ${response.statusCode}\n', |
||||
), |
||||
); |
||||
return super.onResponse(response); |
||||
} |
||||
|
||||
@override |
||||
Future onError(DioError err) async { |
||||
return super.onError(err); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,21 @@ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:selfprivacy/logic/models/message.dart'; |
||||
|
||||
abstract class ConsoleModel extends ChangeNotifier { |
||||
void addMessage(Message message); |
||||
|
||||
List<Message> get messages; |
||||
} |
||||
|
||||
class ConsoleModelImplementation extends ConsoleModel { |
||||
List<Message> _messages = []; |
||||
|
||||
@override |
||||
List<Message> get messages => _messages; |
||||
|
||||
@override |
||||
void addMessage(Message message) { |
||||
messages.add(message); |
||||
notifyListeners(); |
||||
} |
||||
} |
@ -0,0 +1,14 @@ |
||||
import 'package:intl/intl.dart'; |
||||
|
||||
final formater = new DateFormat('hh:mm'); |
||||
|
||||
class Message { |
||||
Message({ |
||||
this.text, |
||||
}) : time = DateTime.now(); |
||||
|
||||
final String text; |
||||
final DateTime time; |
||||
|
||||
String get timeString => formater.format(time); |
||||
} |
@ -0,0 +1,94 @@ |
||||
import 'dart:collection'; |
||||
|
||||
import 'package:flutter/material.dart'; |
||||
import 'package:selfprivacy/config/get_it_config.dart'; |
||||
import 'package:selfprivacy/logic/get_it/console.dart'; |
||||
import 'package:selfprivacy/ui/components/brand_divider/brand_divider.dart'; |
||||
import 'package:selfprivacy/ui/components/brand_header/brand_header.dart'; |
||||
|
||||
class Console extends StatefulWidget { |
||||
const Console({Key key}) : super(key: key); |
||||
|
||||
@override |
||||
_ConsoleState createState() => _ConsoleState(); |
||||
} |
||||
|
||||
class _ConsoleState extends State<Console> { |
||||
@override |
||||
void initState() { |
||||
getIt.get<ConsoleModel>().addListener(update); |
||||
|
||||
super.initState(); |
||||
} |
||||
|
||||
@override |
||||
void dispose() { |
||||
getIt<ConsoleModel>().removeListener(update); |
||||
super.dispose(); |
||||
} |
||||
|
||||
void update() => setState(() => {}); |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
return SafeArea( |
||||
child: Scaffold( |
||||
appBar: PreferredSize( |
||||
child: Column( |
||||
children: [ |
||||
BrandHeader(title: 'Console', hasBackButton: true), |
||||
BrandDivider(), |
||||
], |
||||
), |
||||
preferredSize: Size.fromHeight(53), |
||||
), |
||||
body: FutureBuilder( |
||||
future: getIt.allReady(), |
||||
builder: (BuildContext context, AsyncSnapshot<void> snapshot) { |
||||
if (snapshot.hasData) { |
||||
var messages = getIt.get<ConsoleModel>().messages; |
||||
|
||||
return ListView( |
||||
reverse: true, |
||||
shrinkWrap: true, |
||||
children: [ |
||||
SizedBox(height: 20), |
||||
...UnmodifiableListView(messages |
||||
.map((message) => Padding( |
||||
padding: const EdgeInsets.symmetric(vertical: 4), |
||||
child: RichText( |
||||
text: TextSpan( |
||||
style: DefaultTextStyle.of(context).style, |
||||
children: <TextSpan>[ |
||||
TextSpan( |
||||
text: '${message.timeString}: ', |
||||
style: TextStyle( |
||||
fontWeight: FontWeight.bold)), |
||||
TextSpan(text: message.text), |
||||
], |
||||
), |
||||
), |
||||
)) |
||||
.toList() |
||||
.reversed), |
||||
], |
||||
); |
||||
} else { |
||||
return Column( |
||||
mainAxisAlignment: MainAxisAlignment.center, |
||||
mainAxisSize: MainAxisSize.min, |
||||
children: [ |
||||
Text('Waiting for initialisation'), |
||||
SizedBox( |
||||
height: 16, |
||||
), |
||||
CircularProgressIndicator(), |
||||
], |
||||
); |
||||
} |
||||
}, |
||||
), |
||||
), |
||||
); |
||||
} |
||||
} |
Loading…
Reference in new issue