aves/lib/widgets/fullscreen/source_viewer_page.dart
2020-11-16 19:03:10 +09:00

77 lines
2 KiB
Dart

import 'dart:convert';
import 'package:aves/model/image_entry.dart';
import 'package:aves/services/image_file_service.dart';
import 'package:aves/widgets/common/aves_highlight.dart';
import 'package:flutter/material.dart';
import 'package:flutter_highlight/themes/darcula.dart';
class SourceViewerPage extends StatefulWidget {
static const routeName = '/fullscreen/source';
final ImageEntry entry;
const SourceViewerPage({
@required this.entry,
});
@override
_SourceViewerPageState createState() => _SourceViewerPageState();
}
class _SourceViewerPageState extends State<SourceViewerPage> {
Future<String> _loader;
ImageEntry get entry => widget.entry;
@override
void initState() {
super.initState();
_loader = ImageFileService.getImage(entry.uri, entry.mimeType, 0, false).then(utf8.decode);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Source'),
),
body: SafeArea(
child: FutureBuilder<String>(
future: _loader,
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text(snapshot.error.toString());
}
if (snapshot.connectionState != ConnectionState.done) {
return SizedBox.shrink();
}
final source = snapshot.data;
final highlightView = AvesHighlightView(
source,
language: 'xml',
theme: darculaTheme,
padding: EdgeInsets.all(8),
textStyle: TextStyle(
fontSize: 12,
),
tabSize: 4,
);
return Container(
constraints: BoxConstraints.expand(),
child: Scrollbar(
child: SingleChildScrollView(
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: highlightView,
),
),
),
);
},
),
),
);
}
}