revamp on bloc approach
This commit is contained in:
@ -1,58 +1,58 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../app/base/infrastructure/errorBar/error_bar_controller.dart';
|
||||
import '../../infrastructure/state_extensions.dart';
|
||||
import '../controller_provider.dart';
|
||||
|
||||
class ErrorBar extends StatelessWidget {
|
||||
final bool visible;
|
||||
const ErrorBar({required this.visible, super.key});
|
||||
|
||||
final Duration animationDuration = const Duration(milliseconds: 200);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => ControllerProvider<ErrorBarController>(
|
||||
create: (context) => ErrorBarController(),
|
||||
child: (context) => AnimatedSize(
|
||||
duration: animationDuration,
|
||||
child: AnimatedSwitcher(
|
||||
duration: animationDuration,
|
||||
transitionBuilder: (Widget child, Animation<double> animation) => SlideTransition(
|
||||
position: Tween<Offset>(
|
||||
begin: const Offset(0.0, -1.0),
|
||||
end: Offset.zero,
|
||||
).animate(animation),
|
||||
child: child,
|
||||
),
|
||||
child: Visibility(
|
||||
key: Key(visible.hashCode.toString()),
|
||||
visible: visible,
|
||||
replacement: const SizedBox(width: double.infinity),
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
var controller = context.watchController<ErrorBarController>();
|
||||
var status = controller.connectivityStatusKnown() && !controller.isConnected()
|
||||
? (icon: Icons.wifi_off_outlined, text: 'Offline', color: Colors.grey.shade600)
|
||||
: (icon: Icons.wifi_find_outlined, text: 'Verbindung fehlgeschlagen', color: Theme.of(context).primaryColor);
|
||||
|
||||
return Container(
|
||||
height: 20,
|
||||
decoration: BoxDecoration(
|
||||
color: status.color,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(status.icon, size: 14),
|
||||
const SizedBox(width: 10),
|
||||
Text(status.text, style: const TextStyle(fontSize: 12))
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
)
|
||||
)
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
// import 'package:flutter/material.dart';
|
||||
//
|
||||
// import '../../app/base/infrastructure/errorBar/error_bar_controller.dart';
|
||||
// import '../../infrastructure/state_extensions.dart';
|
||||
// import '../controller_provider.dart';
|
||||
//
|
||||
// class ErrorBar extends StatelessWidget {
|
||||
// final bool visible;
|
||||
// const ErrorBar({required this.visible, super.key});
|
||||
//
|
||||
// final Duration animationDuration = const Duration(milliseconds: 200);
|
||||
//
|
||||
// @override
|
||||
// Widget build(BuildContext context) => ControllerProvider<ErrorBarController>(
|
||||
// create: (context) => ErrorBarController(),
|
||||
// child: (context) => AnimatedSize(
|
||||
// duration: animationDuration,
|
||||
// child: AnimatedSwitcher(
|
||||
// duration: animationDuration,
|
||||
// transitionBuilder: (Widget child, Animation<double> animation) => SlideTransition(
|
||||
// position: Tween<Offset>(
|
||||
// begin: const Offset(0.0, -1.0),
|
||||
// end: Offset.zero,
|
||||
// ).animate(animation),
|
||||
// child: child,
|
||||
// ),
|
||||
// child: Visibility(
|
||||
// key: Key(visible.hashCode.toString()),
|
||||
// visible: visible,
|
||||
// replacement: const SizedBox(width: double.infinity),
|
||||
// child: Builder(
|
||||
// builder: (context) {
|
||||
// var controller = context.watchController<ErrorBarController>();
|
||||
// var status = controller.connectivityStatusKnown() && !controller.isConnected()
|
||||
// ? (icon: Icons.wifi_off_outlined, text: 'Offline', color: Colors.grey.shade600)
|
||||
// : (icon: Icons.wifi_find_outlined, text: 'Verbindung fehlgeschlagen', color: Theme.of(context).primaryColor);
|
||||
//
|
||||
// return Container(
|
||||
// height: 20,
|
||||
// decoration: BoxDecoration(
|
||||
// color: status.color,
|
||||
// ),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.center,
|
||||
// children: [
|
||||
// Icon(status.icon, size: 14),
|
||||
// const SizedBox(width: 10),
|
||||
// Text(status.text, style: const TextStyle(fontSize: 12))
|
||||
// ],
|
||||
// ),
|
||||
// );
|
||||
// },
|
||||
// )
|
||||
// )
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
|
@ -1,12 +1,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
import '../infrastructure/controller.dart';
|
||||
|
||||
class ControllerConsumer<TController extends Controller<TState>, TState> extends StatelessWidget {
|
||||
final Widget Function(BuildContext context, TState state) child;
|
||||
const ControllerConsumer({required this.child, super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => BlocBuilder<TController, TState>(builder: child);
|
||||
}
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
//
|
||||
// import '../infrastructure/controller.dart';
|
||||
//
|
||||
// class ControllerConsumer<TController extends Controller<TState>, TState> extends StatelessWidget {
|
||||
// final Widget Function(BuildContext context, TState state) child;
|
||||
// const ControllerConsumer({required this.child, super.key});
|
||||
//
|
||||
// @override
|
||||
// Widget build(BuildContext context) => BlocBuilder<TController, TState>(builder: child);
|
||||
// }
|
||||
|
@ -1,21 +1,21 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:provider/single_child_widget.dart';
|
||||
|
||||
import '../infrastructure/controller.dart';
|
||||
|
||||
|
||||
class ControllerProvider<TState extends Controller> extends SingleChildStatelessWidget {
|
||||
final TState Function(BuildContext context) create;
|
||||
final bool lazy;
|
||||
final Widget Function(BuildContext context) child;
|
||||
ControllerProvider({required this.create, this.lazy = true, required this.child, super.key})
|
||||
: super(child: Builder(builder: child));
|
||||
|
||||
@override
|
||||
Widget buildWithChild(BuildContext context, Widget? child) => BlocProvider(
|
||||
create: create,
|
||||
lazy: lazy,
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
// import 'package:provider/single_child_widget.dart';
|
||||
//
|
||||
// import '../infrastructure/controller.dart';
|
||||
//
|
||||
//
|
||||
// class ControllerProvider<TState extends Controller> extends SingleChildStatelessWidget {
|
||||
// final TState Function(BuildContext context) create;
|
||||
// final bool lazy;
|
||||
// final Widget Function(BuildContext context) child;
|
||||
// ControllerProvider({required this.create, this.lazy = true, required this.child, super.key})
|
||||
// : super(child: Builder(builder: child));
|
||||
//
|
||||
// @override
|
||||
// Widget buildWithChild(BuildContext context, Widget? child) => BlocProvider(
|
||||
// create: create,
|
||||
// lazy: lazy,
|
||||
// child: child,
|
||||
// );
|
||||
// }
|
||||
|
@ -1,17 +1,17 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
import 'controller_provider.dart';
|
||||
|
||||
class ControllersProvider extends StatelessWidget {
|
||||
final List<ControllerProvider> controllers;
|
||||
final Widget Function(BuildContext context) child;
|
||||
const ControllersProvider({required this.controllers, required this.child, super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => MultiBlocProvider(
|
||||
providers: controllers,
|
||||
child: Builder(builder: child)
|
||||
);
|
||||
}
|
||||
//
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
//
|
||||
// import 'controller_provider.dart';
|
||||
//
|
||||
// class ControllersProvider extends StatelessWidget {
|
||||
// final List<ControllerProvider> controllers;
|
||||
// final Widget Function(BuildContext context) child;
|
||||
// const ControllersProvider({required this.controllers, required this.child, super.key});
|
||||
//
|
||||
// @override
|
||||
// Widget build(BuildContext context) => MultiBlocProvider(
|
||||
// providers: controllers,
|
||||
// child: Builder(builder: child)
|
||||
// );
|
||||
// }
|
||||
|
@ -1,40 +1,42 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../infrastructure/controller.dart';
|
||||
import '../infrastructure/loadable_state.dart';
|
||||
import '../infrastructure/state_extensions.dart';
|
||||
import 'components/background_loading_indicator.dart';
|
||||
import 'components/error_bar.dart';
|
||||
import 'components/primary_loading_indicator.dart';
|
||||
|
||||
class LoadableControllerConsumer<TController extends Controller<TState>, TState extends LoadableState> extends StatelessWidget {
|
||||
final Widget child;
|
||||
const LoadableControllerConsumer({required this.child, super.key});
|
||||
|
||||
final Duration animationDuration = const Duration(milliseconds: 200);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var state = context.readController<TController>().state;
|
||||
return Column(
|
||||
children: [
|
||||
ErrorBar(visible: state.errorBarVisible()),
|
||||
Expanded(
|
||||
child: Stack(
|
||||
children: [
|
||||
PrimaryLoadingIndicator(visible: !state.hasStateData()),
|
||||
BackgroundLoadingIndicator(visible: state.isBackgroundLoading() && !state.errorBarVisible()),
|
||||
|
||||
AnimatedOpacity(
|
||||
opacity: state.hasStateData() ? 1.0 : 0.0,
|
||||
duration: animationDuration,
|
||||
curve: Curves.easeInOut,
|
||||
child: state.hasStateData() ? child : const SizedBox.shrink()
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
//
|
||||
// import '../infrastructure/controller.dart';
|
||||
// import '../infrastructure/loadable_state.dart';
|
||||
// import '../infrastructure/state_extensions.dart';
|
||||
// import 'components/background_loading_indicator.dart';
|
||||
// import 'components/error_bar.dart';
|
||||
// import 'components/primary_loading_indicator.dart';
|
||||
//
|
||||
// class LoadableControllerConsumer<TController extends Controller<TState>, TState extends LoadableState> extends StatelessWidget {
|
||||
// final Widget child;
|
||||
// const LoadableControllerConsumer({required this.child, super.key});
|
||||
//
|
||||
// final Duration animationDuration = const Duration(milliseconds: 200);
|
||||
//
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// var state = context.readController<TController>().state;
|
||||
//
|
||||
// return Column(
|
||||
// children: [
|
||||
// // ErrorBar(visible: state.errorBarVisible()),
|
||||
// // Expanded(
|
||||
// // child: Stack(
|
||||
// // children: [
|
||||
// // PrimaryLoadingIndicator(visible: !state.hasStateData()),
|
||||
// // BackgroundLoadingIndicator(visible: state.isBackgroundLoading() && !state.errorBarVisible()),
|
||||
// //
|
||||
// // AnimatedOpacity(
|
||||
// // opacity: state.hasStateData() ? 1.0 : 0.0,
|
||||
// // duration: animationDuration,
|
||||
// // curve: Curves.easeInOut,
|
||||
// // child: state.hasStateData() ? child : const SizedBox.shrink()
|
||||
// // ),
|
||||
// // ],
|
||||
// // ),
|
||||
// // )
|
||||
// ],
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
Reference in New Issue
Block a user