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 { 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: [ 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( builder: (BuildContext context) { return SettingsPage(); }, ));}, ), ], ), ); }, ), ); } }