You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

211 lines
8.0 KiB

// This file is part of Hamlet Social.
//
// Hamlet Social is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// Hamlet Social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Hamlet Social. If not, see <https://www.gnu.org/licenses/>.
import 'package:country_codes/country_codes.dart';
import 'package:flutter/material.dart';
import 'package:hamlet_social/data/instance.dart';
import 'package:hamlet_social/endpoints/unauthenticated/available_instances.dart';
import 'package:hamlet_social/route_generator.dart';
import 'package:hamlet_social/views/authenticated/timeline_screen.dart';
import 'package:hamlet_social/views/unauthenticated/auth_screen.dart';
import 'package:pleroma_dart/pleroma_dart.dart';
import 'package:pleroma_flutter/pleroma_flutter.dart';
import 'package:provider/provider.dart';
import 'package:web_socket_channel/io.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await CountryCodes.init();
Pleroma pleroma = Pleroma(
Uri.parse("https://zoinks.one"),
websocketFactory: (uri) => IOWebSocketChannel.connect(uri),
);
final AuthBloc authBloc = AuthBloc(
pleroma,
Uri.parse("https://hamlet.social"),
storage: AuthStorage(),
);
await authBloc.initalized;
runApp(MyApp(
bloc: authBloc,
pleroma: pleroma,
hamletInstances: await availableInstances()));
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
const MyApp(
{Key key, @required this.bloc, this.pleroma, this.hamletInstances})
: super(key: key);
final AuthBloc bloc;
final Pleroma pleroma;
final List<HamletInstance> hamletInstances;
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
Provider<AuthBloc>(create: (_) => bloc),
Provider<Pleroma>(create: (_) => pleroma),
Provider<List<HamletInstance>>(create: (_) => hamletInstances),
],
child: MaterialApp(
title: 'Hamlet',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.green,
accentColor: Colors.blue,
// This makes the visual density adapt to the platform that you run
// the app on. For desktop platforms, the controls will be smaller and
// closer together (more dense) than on mobile platforms.
visualDensity: VisualDensity.adaptivePlatformDensity,
),
initialRoute: '/',
onGenerateRoute: RouteGenerator.generateRoute,
// routes: {
// '/': (context) =>
// },
// home: Navigator(
// pages: [
// MaterialPage(
// child: AuthScreen(hamletInstances: widget.hamletInstances)),
// ],
// onPopPage: (route, result) {
// if (!route.didPop(result)) return false;
// return true;
// },
// ),
// home: bloc.account.value == null
// ? AuthScreen(hamletInstances: hamletInstances)
// : TimelineScreen(account: bloc.account.value),
),
);
}
// @override
// _MyAppState createState() => _MyAppState();
}
// class _MyAppState extends State<MyApp> {}
//
// class MyHomePage extends StatefulWidget {
// MyHomePage({
// Key key,
// this.title,
// this.pleroma,
// }) : super(key: key);
//
// // This widget is the home page of your application. It is stateful, meaning
// // that it has a State object (defined below) that contains fields that affect
// // how it looks.
//
// // This class is the configuration for the state. It holds the values (in this
// // case the title) provided by the parent (in this case the App widget) and
// // used by the build method of the State. Fields in a Widget subclass are
// // always marked "final".
//
// final String title;
// final Pleroma pleroma;
//
// @override
// _MyHomePageState createState() => _MyHomePageState(pleroma);
// }
//
// class _MyHomePageState extends State<MyHomePage> {
// int _counter = 0;
// final Pleroma _pleroma;
// String _postText;
//
// _MyHomePageState(this._pleroma);
//
// void _incrementCounter() async {
// final post = (await this._pleroma.publicTimeline(limit: 1))[0];
// setState(() {
// // This call to setState tells the Flutter framework that something has
// // changed in this State, which causes it to rerun the build method below
// // so that the display can reflect the updated values. If we changed
// // _counter without calling setState(), then the build method would not be
// // called again, and so nothing would appear to happen.
// _counter++;
// _postText = post.text;
// });
// }
//
// @override
// Widget build(BuildContext context) {
// // This method is rerun every time setState is called, for instance as done
// // by the _incrementCounter method above.
// //
// // The Flutter framework has been optimized to make rerunning build methods
// // fast, so that you can just rebuild anything that needs updating rather
// // than having to individually change instances of widgets.
// return Scaffold(
// appBar: AppBar(
// // Here we take the value from the MyHomePage object that was created by
// // the App.build method, and use it to set our appbar title.
// title: Text(widget.title),
// ),
// body: Center(
// // Center is a layout widget. It takes a single child and positions it
// // in the middle of the parent.
// child: Column(
// // Column is also a layout widget. It takes a list of children and
// // arranges them vertically. By default, it sizes itself to fit its
// // children horizontally, and tries to be as tall as its parent.
// //
// // Invoke "debug painting" (press "p" in the console, choose the
// // "Toggle Debug Paint" action from the Flutter Inspector in Android
// // Studio, or the "Toggle Debug Paint" command in Visual Studio Code)
// // to see the wireframe for each widget.
// //
// // Column has various properties to control how it sizes itself and
// // how it positions its children. Here we use mainAxisAlignment to
// // center the children vertically; the main axis here is the vertical
// // axis because Columns are vertical (the cross axis would be
// // horizontal).
// mainAxisAlignment: MainAxisAlignment.center,
// children: <Widget>[
// Text(
// 'You have pushed the button this many times:',
// ),
// Text(
// '$_counter',
// style: Theme.of(context).textTheme.headline4,
// ),
// Text('PostText: $_postText'),
// ],
// ),
// ),
// floatingActionButton: FloatingActionButton(
// onPressed: _incrementCounter,
// tooltip: 'Increment',
// child: Icon(Icons.add),
// ), // This trailing comma makes auto-formatting nicer for build methods.
// );
// }
// }