mirror of
https://github.com/flutter/samples.git
synced 2025-11-08 13:58:47 +00:00
Add firebase support to web_dashboard (#421)
* add mock data, app state, model classes * Set up app without ChangeNotifier * refactor * add experiments to experimental/ * Add project-agnostic Firebase authentication code * add sign in button * add stub firebase API * add firestore * refactor code for google_sign_in * update pubspec.lock * switch to mocks for non-firebase version * Add firebase instructions to the README * fix README * sign in silently if the user is already signed in * add json_serializable * update README * ignore 'id' field on types * Implement FirebaseItemApi * Add build_runner instructions to README * remove experiments directory * add EditItemForm * move types.dart into api.dart * move mock and firebase configuration into the constructor * add main_mock entrypoint * add copyright checks to grinder script * fix fix-copyright task * run grind fix-copyright * add run and generate tasks * add run tasks to grind script * add fillWithMockData() fix delete() in mock API * add edit / new form dialogs * Add charts that display entries from Firebase * Add Entries list without editing * refactor home page * format * Add entries page functionality * Show current day in charts * cleanup: pubspec.lock, remove type annotation * Remove _selectedItem from Home page Add ItemsDropdown Use ItemsDropdown in NewEntryDialog / NewEntryForm * rename item-category * don't wait to show snackbar on delete * fix circular progress indicator * Move dialogs into dialogs.dart * run grind fix-copyright * remove unused import * Refactor entry total calculation, add chart_utils library * fix bug in chart_utils.dart * convert CategoryChart to a stateless widget * use a const for number of days in chart * code review updates - rename stream -> subscribe - timeStamp -> timestamp - remove latest() from API - use FutureBuilder and StreamBuilder instead of stateful widget - rename variables in mock_service_test.dart * use a single collection reference in firebase API * remove reference to stream in mock API * Use a new type, _EntriesEvent to improve filtering in mock API * add analysis_options.yaml and fix (most) issues * fix avoid_types_on_closure_parameters lint warnings * use spread operator in dashboard.dart * handle case where selected item in the category dropdown goes away * use StreamBuilder + FutureBuilder on Entries page * rename method * use fake firebase configuration * update pubspec.lock * update README * Change categories_dropdown to FutureBuilder + StreamBuilder * Update minSdkVersion in build.gradle SDK version 16 was failing: "The number of method references in a .dex file cannot exceed 64K." * update README * Use a collection reference in FirebaseEntryApi Already added to FirebaseCategoryApi * Invoke onSelected in CategoriesDropdown when necessary Also, avoid calling onSelected during a build. * fix misnamed var * remove unused import * Use relative imports * Use extension methods for DateTime utilities * remove forms.dart * Make Firebase instructions specific for this sample * add copyright headers * fix grammar * dartfmt * avoid setState() during build phase in CategoryDropdown * add empty test to material_theme_builder
This commit is contained in:
108
experimental/web_dashboard/tool/grind.dart
Normal file
108
experimental/web_dashboard/tool/grind.dart
Normal file
@@ -0,0 +1,108 @@
|
||||
// Copyright 2020, the Flutter 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 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
import 'package:grinder/grinder.dart';
|
||||
|
||||
void main(List<String> args) => grind(args);
|
||||
|
||||
@Task()
|
||||
void runSkia() {
|
||||
run('flutter',
|
||||
arguments:
|
||||
'run -d web --web-port=5000 --release --dart-define=FLUTTER_WEB_USE_SKIA=true lib/main.dart '
|
||||
.split(' '));
|
||||
}
|
||||
|
||||
@Task()
|
||||
void runWeb() {
|
||||
run('flutter',
|
||||
arguments: 'run -d web --web-port=5000 lib/main.dart '.split(' '));
|
||||
}
|
||||
|
||||
@Task()
|
||||
void runMock() {
|
||||
run('flutter',
|
||||
arguments: 'run -d web --web-port=5000 lib/main_mock.dart '.split(' '));
|
||||
}
|
||||
|
||||
@Task()
|
||||
void runMockSkia() {
|
||||
run('flutter',
|
||||
arguments:
|
||||
'run -d web --web-port=5000 --release --dart-define=FLUTTER_WEB_USE_SKIA=true lib/main_mock.dart'
|
||||
.split(' '));
|
||||
}
|
||||
|
||||
@Task()
|
||||
void test() {
|
||||
TestRunner().testAsync();
|
||||
}
|
||||
|
||||
@DefaultTask()
|
||||
@Depends(test, copyright)
|
||||
void build() {
|
||||
Pub.build();
|
||||
}
|
||||
|
||||
@Task()
|
||||
void clean() => defaultClean();
|
||||
|
||||
@Task()
|
||||
void generate() {
|
||||
Pub.run('build_runner', arguments: ['build']);
|
||||
}
|
||||
|
||||
const _copyright =
|
||||
'''// Copyright 2020, the Flutter 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.''';
|
||||
|
||||
@Task()
|
||||
Future copyright() async {
|
||||
var files = <File>[];
|
||||
await for (var file in _filesWithoutCopyright()) {
|
||||
files.add(file);
|
||||
}
|
||||
|
||||
if (files.isNotEmpty) {
|
||||
log('Found Dart files without a copyright header:');
|
||||
for (var file in files) {
|
||||
log(file.toString());
|
||||
}
|
||||
fail('run "grind fix-copyright" to add copyright headers');
|
||||
}
|
||||
}
|
||||
|
||||
@Task()
|
||||
Future fixCopyright() async {
|
||||
await for (var file in _filesWithoutCopyright()) {
|
||||
var contents = await file.readAsString();
|
||||
await file.writeAsString(_copyright + '\n\n' + contents);
|
||||
}
|
||||
}
|
||||
|
||||
Stream<File> _filesWithoutCopyright() async* {
|
||||
var set = FileSet.fromDir(Directory('.'), recurse: true);
|
||||
var dartFiles =
|
||||
set.files.where((file) => path.extension(file.path) == '.dart');
|
||||
|
||||
for (var file in dartFiles) {
|
||||
var firstThreeLines = await file
|
||||
.openRead()
|
||||
.transform(utf8.decoder)
|
||||
.transform(LineSplitter())
|
||||
.take(3)
|
||||
.fold<String>('', (previous, element) {
|
||||
if (previous == '') return element;
|
||||
return previous + '\n' + element;
|
||||
});
|
||||
|
||||
if (firstThreeLines != _copyright) {
|
||||
yield file;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user