35 changed files with 1544 additions and 806 deletions
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Binary file not shown.
@ -0,0 +1,7 @@ |
|||
{ |
|||
"file_generated_by": "FlutterFire CLI", |
|||
"purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", |
|||
"GOOGLE_APP_ID": "1:280510379185:ios:52af12a619d5443119de90", |
|||
"FIREBASE_PROJECT_ID": "teso-ghana", |
|||
"GCM_SENDER_ID": "280510379185" |
|||
} |
@ -0,0 +1,72 @@ |
|||
// File generated by FlutterFire CLI. |
|||
// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members |
|||
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; |
|||
import 'package:flutter/foundation.dart' |
|||
show defaultTargetPlatform, kIsWeb, TargetPlatform; |
|||
|
|||
/// Default [FirebaseOptions] for use with your Firebase apps. |
|||
/// |
|||
/// Example: |
|||
/// ```dart |
|||
/// import 'firebase_options.dart'; |
|||
/// // ... |
|||
/// await Firebase.initializeApp( |
|||
/// options: DefaultFirebaseOptions.currentPlatform, |
|||
/// ); |
|||
/// ``` |
|||
class DefaultFirebaseOptions { |
|||
static FirebaseOptions get currentPlatform { |
|||
if (kIsWeb) { |
|||
throw UnsupportedError( |
|||
'DefaultFirebaseOptions have not been configured for web - ' |
|||
'you can reconfigure this by running the FlutterFire CLI again.', |
|||
); |
|||
} |
|||
switch (defaultTargetPlatform) { |
|||
case TargetPlatform.android: |
|||
return android; |
|||
case TargetPlatform.iOS: |
|||
return ios; |
|||
case TargetPlatform.macOS: |
|||
throw UnsupportedError( |
|||
'DefaultFirebaseOptions have not been configured for macos - ' |
|||
'you can reconfigure this by running the FlutterFire CLI again.', |
|||
); |
|||
case TargetPlatform.windows: |
|||
throw UnsupportedError( |
|||
'DefaultFirebaseOptions have not been configured for windows - ' |
|||
'you can reconfigure this by running the FlutterFire CLI again.', |
|||
); |
|||
case TargetPlatform.linux: |
|||
throw UnsupportedError( |
|||
'DefaultFirebaseOptions have not been configured for linux - ' |
|||
'you can reconfigure this by running the FlutterFire CLI again.', |
|||
); |
|||
default: |
|||
throw UnsupportedError( |
|||
'DefaultFirebaseOptions are not supported for this platform.', |
|||
); |
|||
} |
|||
} |
|||
|
|||
static const FirebaseOptions android = FirebaseOptions( |
|||
apiKey: 'AIzaSyAHBguF6oqPEq7em1vLrh_NP2LoPuabe6o', |
|||
appId: '1:280510379185:android:b778de8dca1cf49219de90', |
|||
messagingSenderId: '280510379185', |
|||
projectId: 'teso-ghana', |
|||
databaseURL: 'https://teso-ghana-default-rtdb.firebaseio.com', |
|||
storageBucket: 'teso-ghana.appspot.com', |
|||
); |
|||
|
|||
static const FirebaseOptions ios = FirebaseOptions( |
|||
apiKey: 'AIzaSyCBDtZO2_Z5JjrNj1TocK6YAlk_wDbzZHs', |
|||
appId: '1:280510379185:ios:52af12a619d5443119de90', |
|||
messagingSenderId: '280510379185', |
|||
projectId: 'teso-ghana', |
|||
databaseURL: 'https://teso-ghana-default-rtdb.firebaseio.com', |
|||
storageBucket: 'teso-ghana.appspot.com', |
|||
androidClientId: '280510379185-0shp8sia3i5m589bov645t3kuddb1032.apps.googleusercontent.com', |
|||
iosClientId: '280510379185-67vianhh973klriv75ip2tb9cf8ibitl.apps.googleusercontent.com', |
|||
iosBundleId: 'com.tesoapp', |
|||
); |
|||
} |
@ -0,0 +1,232 @@ |
|||
// import 'dart:math' as math; |
|||
// import 'package:flutter/material.dart'; |
|||
|
|||
// @immutable |
|||
// class ExpandableFab extends StatefulWidget { |
|||
// const ExpandableFab({ |
|||
// super.key, |
|||
// this.initialOpen, |
|||
// required this.distance, |
|||
// required this.children, |
|||
// }); |
|||
|
|||
// final bool? initialOpen; |
|||
// final double distance; |
|||
// final List<Widget> children; |
|||
|
|||
// @override |
|||
// _ExpandableFabState createState() => _ExpandableFabState(); |
|||
// } |
|||
|
|||
// class _ExpandableFabState extends State<ExpandableFab> |
|||
// with SingleTickerProviderStateMixin { |
|||
// late final AnimationController _controller; |
|||
// late final Animation<double> _expandAnimation; |
|||
// bool _open = false; |
|||
|
|||
// @override |
|||
// void initState() { |
|||
// super.initState(); |
|||
// _open = widget.initialOpen ?? false; |
|||
// _controller = AnimationController( |
|||
// value: _open ? 1.0 : 0.0, |
|||
// duration: const Duration(milliseconds: 250), |
|||
// vsync: this, |
|||
// ); |
|||
// _expandAnimation = CurvedAnimation( |
|||
// curve: Curves.fastOutSlowIn, |
|||
// reverseCurve: Curves.easeOutQuad, |
|||
// parent: _controller, |
|||
// ); |
|||
// } |
|||
|
|||
// @override |
|||
// void dispose() { |
|||
// _controller.dispose(); |
|||
// super.dispose(); |
|||
// } |
|||
|
|||
// void _toggle() { |
|||
// setState(() { |
|||
// _open = !_open; |
|||
// if (_open) { |
|||
// _controller.forward(); |
|||
// } else { |
|||
// _controller.reverse(); |
|||
// } |
|||
// }); |
|||
// } |
|||
|
|||
// @override |
|||
// Widget build(BuildContext context) { |
|||
// return SizedBox.expand( |
|||
// child: Stack( |
|||
// alignment: Alignment.bottomRight, |
|||
// clipBehavior: Clip.none, |
|||
// children: [ |
|||
// _buildTapToCloseFab(), |
|||
// ..._buildExpandingActionButtons(), |
|||
// _buildTapToOpenFab(), |
|||
// ], |
|||
// ), |
|||
// ); |
|||
// } |
|||
|
|||
// Widget _buildTapToCloseFab() { |
|||
// return SizedBox( |
|||
// width: 56.0, |
|||
// height: 56.0, |
|||
// child: Center( |
|||
// child: Material( |
|||
// shape: const CircleBorder(), |
|||
// clipBehavior: Clip.antiAlias, |
|||
// elevation: 4.0, |
|||
// child: InkWell( |
|||
// onTap: _toggle, |
|||
// child: Padding( |
|||
// padding: const EdgeInsets.all(8.0), |
|||
// child: Icon( |
|||
// Icons.close, |
|||
// color: Theme.of(context).primaryColor, |
|||
// ), |
|||
// ), |
|||
// ), |
|||
// ), |
|||
// ), |
|||
// ); |
|||
// } |
|||
|
|||
// List<Widget> _buildExpandingActionButtons() { |
|||
// final children = <Widget>[]; |
|||
// final count = widget.children.length; |
|||
// final step = 90.0 / (count - 1); |
|||
// for (var i = 0, angleInDegrees = 0.0; |
|||
// i < count; |
|||
// i++, angleInDegrees += step) { |
|||
// children.add( |
|||
// _ExpandingActionButton( |
|||
// directionInDegrees: angleInDegrees, |
|||
// maxDistance: widget.distance, |
|||
// progress: _expandAnimation, |
|||
// child: widget.children[i], |
|||
// ), |
|||
// ); |
|||
// } |
|||
// return children; |
|||
// } |
|||
|
|||
// Widget _buildTapToOpenFab() { |
|||
// return IgnorePointer( |
|||
// ignoring: _open, |
|||
// child: AnimatedContainer( |
|||
// transformAlignment: Alignment.center, |
|||
// transform: Matrix4.diagonal3Values( |
|||
// _open ? 0.7 : 1.0, |
|||
// _open ? 0.7 : 1.0, |
|||
// 1.0, |
|||
// ), |
|||
// duration: const Duration(milliseconds: 250), |
|||
// curve: const Interval(0.0, 0.5, curve: Curves.easeOut), |
|||
// child: AnimatedOpacity( |
|||
// opacity: _open ? 0.0 : 1.0, |
|||
// curve: const Interval(0.25, 1.0, curve: Curves.easeInOut), |
|||
// duration: const Duration(milliseconds: 250), |
|||
// child: FloatingActionButton( |
|||
// onPressed: _toggle, |
|||
// child: const Icon(Icons.create), |
|||
// ), |
|||
// ), |
|||
// ), |
|||
// ); |
|||
// } |
|||
// } |
|||
|
|||
// @immutable |
|||
// class _ExpandingActionButton extends StatelessWidget { |
|||
// const _ExpandingActionButton({ |
|||
// required this.directionInDegrees, |
|||
// required this.maxDistance, |
|||
// required this.progress, |
|||
// required this.child, |
|||
// }); |
|||
|
|||
// final double directionInDegrees; |
|||
// final double maxDistance; |
|||
// final Animation<double> progress; |
|||
// final Widget child; |
|||
|
|||
// @override |
|||
// Widget build(BuildContext context) { |
|||
// return AnimatedBuilder( |
|||
// animation: progress, |
|||
// builder: (context, child) { |
|||
// final offset = Offset.fromDirection( |
|||
// directionInDegrees * (math.pi / 180.0), |
|||
// progress.value * maxDistance, |
|||
// ); |
|||
// return Positioned( |
|||
// right: 4.0 + offset.dx, |
|||
// bottom: 4.0 + offset.dy, |
|||
// child: Transform.rotate( |
|||
// angle: (1.0 - progress.value) * math.pi / 2, |
|||
// child: child!, |
|||
// ), |
|||
// ); |
|||
// }, |
|||
// child: FadeTransition( |
|||
// opacity: progress, |
|||
// child: child, |
|||
// ), |
|||
// ); |
|||
// } |
|||
// } |
|||
|
|||
// @immutable |
|||
// class ActionButton extends StatelessWidget { |
|||
// const ActionButton({ |
|||
// super.key, |
|||
// this.onPressed, |
|||
// required this.icon, |
|||
// }); |
|||
|
|||
// final VoidCallback? onPressed; |
|||
// final Widget icon; |
|||
|
|||
// @override |
|||
// Widget build(BuildContext context) { |
|||
// final theme = Theme.of(context); |
|||
// return Material( |
|||
// shape: const CircleBorder(), |
|||
// clipBehavior: Clip.antiAlias, |
|||
// color: theme.colorScheme.secondary, |
|||
// elevation: 4.0, |
|||
// child: IconButton( |
|||
// onPressed: onPressed, |
|||
// icon: icon, |
|||
// color: theme.colorScheme.secondary, |
|||
// ), |
|||
// ); |
|||
// } |
|||
// } |
|||
|
|||
// @immutable |
|||
// class FakeItem extends StatelessWidget { |
|||
// const FakeItem({ |
|||
// super.key, |
|||
// required this.isBig, |
|||
// }); |
|||
|
|||
// final bool isBig; |
|||
|
|||
// @override |
|||
// Widget build(BuildContext context) { |
|||
// return Container( |
|||
// margin: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 24.0), |
|||
// height: isBig ? 128.0 : 36.0, |
|||
// decoration: BoxDecoration( |
|||
// borderRadius: const BorderRadius.all(Radius.circular(8.0)), |
|||
// color: Colors.grey.shade300, |
|||
// ), |
|||
// ); |
|||
// } |
|||
// } |
Loading…
Reference in new issue