Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 4 additions & 53 deletions current_results_ui/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import 'firebase_options.dart';
import 'src/auth_service.dart';
import 'src/platform_specific/url_strategy_stub.dart'
if (dart.library.js_interop) 'src/platform_specific/url_strategy_web.dart';
import 'src/routing.dart';
import 'src/app/app.dart';
import 'src/app/firebase_options.dart';
import 'src/shared/platform/url_strategy_stub.dart'
if (dart.library.js_interop) 'src/shared/platform/url_strategy_web.dart';

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
Expand All @@ -25,50 +23,3 @@ Future<void> main() async {
runApp(FirebaseErrorApp(error: e.toString()));
}
}

class FirebaseErrorApp extends StatelessWidget {
final String error;
const FirebaseErrorApp({super.key, required this.error});

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Initialization Error')),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: SelectionArea(
child: Text(
'Failed to initialize Firebase. Please check your configuration and ensure you have added the necessary platform-specific setup.\n\nError: $error',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.red, fontSize: 16),
),
),
),
),
),
);
}
}

final _router = createRouter();

class CurrentResultsApp extends StatelessWidget {
const CurrentResultsApp({super.key});

@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<AuthService>(
create: (_) => AuthService(),
child: MaterialApp.router(
title: 'Current Results',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.compact,
),
routerConfig: _router,
),
);
}
}
56 changes: 56 additions & 0 deletions current_results_ui/lib/src/app/app.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import 'app_router.dart';
import 'auth_service.dart';

class FirebaseErrorApp extends StatelessWidget {
final String error;
const FirebaseErrorApp({super.key, required this.error});

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Initialization Error')),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: SelectionArea(
child: Text(
'Failed to initialize Firebase. Please check your configuration and ensure you have added the necessary platform-specific setup.\n\nError: $error',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.red, fontSize: 16),
),
),
),
),
),
);
}
}

final _router = createRouter();

class CurrentResultsApp extends StatelessWidget {
const CurrentResultsApp({super.key});

@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<AuthService>(
create: (_) => AuthService(),
child: MaterialApp.router(
title: 'Current Results',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.compact,
),
routerConfig: _router,
),
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';

import '../filter.dart';
import '../query.dart';
import '../src/widgets/results_view.dart';
import '../try_results_screen.dart';
import 'data/try_query_results.dart';
import '../data/models/filter.dart';
import '../features/results_overview/data/results_repository.dart';
import '../features/try_results/data/try_results_repository.dart';
import '../features/try_results/widgets/try_results_screen.dart';
import '../shared/widgets/results_view.dart';

typedef QueryResultsFactory = QueryResultsBase Function(Filter filter);
typedef TryQueryResultsFactory =
Expand Down
22 changes: 22 additions & 0 deletions current_results_ui/lib/src/data/models/filter.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of a source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:collection/collection.dart';

class Filter {
final List<String> terms;
Filter(String termString) : terms = _parse(termString);

static List<String> _parse(String termString) {
if (termString.trim() == '') return List.unmodifiable([]);
return List.unmodifiable(termString.split(',').map((s) => s.trim()));
}

@override
bool operator ==(Object other) =>
other is Filter && const ListEquality().equals(terms, other.terms);

@override
int get hashCode => const ListEquality().hash(terms);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import '../../model/comment.dart';
import '../../model/review.dart';
import '../../model/try_build.dart';
import '../../query.dart';
import '../generated/query.pb.dart';
import '../../features/results_overview/data/results_repository.dart';
import '../../shared/generated/query.pb.dart';
import '../models/comment.dart';
import '../models/review.dart';
import '../models/try_build.dart';
import 'firestore_service.dart';

class ResultsService {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

Expand All @@ -9,9 +9,9 @@ import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;

import 'filter.dart';
import 'results.dart';
import 'src/generated/query.pb.dart';
import '../../../data/models/filter.dart';
import '../../../shared/generated/query.pb.dart';
import '../../../shared/widgets/results_widgets.dart';

const String apiHost = 'current-results-qvyo5rktwa-uc.a.run.app';
// Current endpoints proxy is limited to 1 MB response size,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,12 @@
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';

import 'query.dart';

class Filter {
final List<String> terms;
Filter(String termString) : terms = _parse(termString);

static List<String> _parse(String termString) {
if (termString.trim() == '') return List.unmodifiable([]);
return List.unmodifiable(termString.split(',').map((s) => s.trim()));
}

@override
bool operator ==(Object other) =>
other is Filter && const ListEquality().equals(terms, other.terms);

@override
int get hashCode => const ListEquality().hash(terms);
}
import '../data/results_repository.dart';

class FilterUI extends StatefulWidget {
const FilterUI({super.key});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

import 'dart:async';

import '../../filter.dart';
import '../../model/review.dart';
import '../../query.dart';
import '../generated/query.pb.dart';
import '../services/results_service.dart';
import '../../../data/models/filter.dart';
import '../../../data/models/review.dart';
import '../../../data/services/results_service.dart';
import '../../../shared/generated/query.pb.dart';
import '../../results_overview/data/results_repository.dart';

class TryQueryResults extends QueryResultsBase {
final int cl;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart' as url_launcher;

import 'model/review.dart';
import 'src/data/try_query_results.dart';
import 'src/widgets/results_view.dart';
import '../../../data/models/review.dart';
import '../../../shared/widgets/results_view.dart';
import '../data/try_results_repository.dart';

class TryResultsScreen extends StatefulWidget {
const TryResultsScreen({super.key});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart' as url_launcher;

import '../auth_service.dart';
import '../../app/auth_service.dart';

List<Widget> buildAppBarActions(BuildContext context) {
return [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';

import '../../filter.dart';
import '../../query.dart';
import '../../results.dart';
import '../../data/models/filter.dart';
import '../../features/results_overview/data/results_repository.dart';
import '../../features/results_overview/widgets/filter_ui.dart';
import 'app_bar_actions.dart';
import 'results_widgets.dart';

typedef TitleBuilder = Widget Function(BuildContext context, String title);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

Expand All @@ -8,9 +8,9 @@ import 'package:intl/intl.dart' as intl;
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart' as url_launcher;

import 'instructions.dart';
import 'query.dart';
import 'src/generated/query.pb.dart';
import '../../features/results_overview/data/results_repository.dart';
import '../../features/results_overview/widgets/instructions.dart';
import '../generated/query.pb.dart';

const Color _lightCoral = Color.fromARGB(255, 240, 128, 128);
const Color _gold = Color.fromARGB(255, 255, 215, 0);
Expand Down
2 changes: 1 addition & 1 deletion current_results_ui/test/auth_service_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import 'dart:async';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_current_results/src/auth_service.dart';
import 'package:flutter_current_results/src/app/auth_service.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
Expand Down
8 changes: 4 additions & 4 deletions current_results_ui/test/query_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

import 'dart:convert';

import 'package:flutter_current_results/filter.dart';
import 'package:flutter_current_results/query.dart';
import 'package:flutter_current_results/results.dart';
import 'package:flutter_current_results/src/generated/query.pb.dart';
import 'package:flutter_current_results/src/data/models/filter.dart';
import 'package:flutter_current_results/src/features/results_overview/data/results_repository.dart';
import 'package:flutter_current_results/src/shared/generated/query.pb.dart';
import 'package:flutter_current_results/src/shared/widgets/results_widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:http/http.dart' as http;
import 'package:mockito/annotations.dart';
Expand Down
18 changes: 9 additions & 9 deletions current_results_ui/test/routing_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_current_results/instructions.dart';
import 'package:flutter_current_results/model/review.dart';
import 'package:flutter_current_results/query.dart';
import 'package:flutter_current_results/src/auth_service.dart';
import 'package:flutter_current_results/src/data/try_query_results.dart';
import 'package:flutter_current_results/src/generated/query.pb.dart';
import 'package:flutter_current_results/src/routing.dart';
import 'package:flutter_current_results/src/services/results_service.dart';
import 'package:flutter_current_results/src/widgets/results_view.dart';
import 'package:flutter_current_results/src/app/app_router.dart';
import 'package:flutter_current_results/src/app/auth_service.dart';
import 'package:flutter_current_results/src/data/models/review.dart';
import 'package:flutter_current_results/src/data/services/results_service.dart';
import 'package:flutter_current_results/src/features/results_overview/data/results_repository.dart';
import 'package:flutter_current_results/src/features/results_overview/widgets/instructions.dart';
import 'package:flutter_current_results/src/features/try_results/data/try_results_repository.dart';
import 'package:flutter_current_results/src/shared/generated/query.pb.dart';
import 'package:flutter_current_results/src/shared/widgets/results_view.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http;
Expand Down
10 changes: 5 additions & 5 deletions current_results_ui/test/try_query_results_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:flutter_current_results/filter.dart';
import 'package:flutter_current_results/query.dart';
import 'package:flutter_current_results/src/data/try_query_results.dart';
import 'package:flutter_current_results/src/generated/query.pb.dart';
import 'package:flutter_current_results/src/services/results_service.dart';
import 'package:flutter_current_results/src/data/models/filter.dart';
import 'package:flutter_current_results/src/data/services/results_service.dart';
import 'package:flutter_current_results/src/features/results_overview/data/results_repository.dart';
import 'package:flutter_current_results/src/features/try_results/data/try_results_repository.dart';
import 'package:flutter_current_results/src/shared/generated/query.pb.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
Expand Down
Loading