1
0
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:
John Ryan
2020-05-26 13:14:21 -07:00
committed by GitHub
parent b518c322cc
commit 395ae8c0bb
39 changed files with 2730 additions and 220 deletions

View 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;
}
}
}