This repository has been archived on 2020-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
gopher/lib/main.dart

123 lines
3.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:uni_links/uni_links.dart';
import 'package:shared_preferences/shared_preferences.dart';
import './page/gopher.dart';
import './page/settings.dart';
import './constants.dart';
import './gopher.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
MyApp() {
WidgetsFlutterBinding.ensureInitialized(); // for settings
SharedPreferences.getInstance().then((prefs) {
var init = prefs.getBool("initial_settings");
if (init == null || !init) {
prefs.setDouble("font_size", DEFAULT_FONT_SIZE);
prefs.setBool("initial_settings", true);
}
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'gopher',
theme: ThemeData(
brightness: Brightness.dark,
primaryColor: Colors.indigo,
),
home: MyHomePage(title: 'gopher'),
);
}
}
class MyHomePage extends StatefulWidget {
final String title;
MyHomePage({Key key, this.title}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String url = "";
bool forceLoad = false;
_MyHomePageState() {
getInitialLink().then((s) {
if (s != null) {
setState(() {
forceLoad = true;
url = parseWeakInput(s).toString();
});
}
});
}
@override
Widget build(BuildContext context) {
Widget _createEntry(String title, String url) {
return ListTile(
title: Text(title),
onTap: () { GopherPage.openURI(context, Uri.parse(url)); },
);
}
if (forceLoad) {
var uri = Uri.parse(url);
forceLoad = false;
return GopherPage(uri: uri);
}
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Builder(
builder: (BuildContext context) {
return Center(
child: ListView(
padding: EdgeInsets.all(8.0),
children: <Widget>[
const Text(
"URL:",
),
TextField(
enabled: true,
enableInteractiveSelection: true,
controller: TextEditingController(text: url),
onSubmitted: (s) {
url = s;
var uri = parseWeakInput(s);
GopherPage.openURI(context, uri);
},
),
const Divider(),
const Text(
"Creators favorites:",
),
_createEntry("Bitreich", "gopher://bitreich.org/1"),
_createEntry("Floodgap", "gopher://gopher.floodgap.com/1"),
_createEntry("Gopherpedia", "gopher://gopherpedia.com/1"),
_createEntry("HackerNews mirror", "gopher://hngopher.com/1"),
const Divider(),
ListTile(
title: Text("Settings"),
onTap: () { Navigator.push(context, MaterialPageRoute<void>(
builder: (BuildContext context) {
return SettingsPage();
},
));},
),
],
),
);
},
),
);
}
}