1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import 'package:app_flowy/startup/startup.dart';
- import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart';
- import 'package:flowy_log/flowy_log.dart';
- import 'package:flutter/material.dart';
- import 'package:time/time.dart';
- // [[diagram: HomeStack's widget structure]]
- //
- // ┌──────────────────┐ ┌───────────────┐
- // ┌──│BlankStackContext │──▶│BlankStackPage │
- // ┌──────────┐ ┌───────────────────┐ ┌─────────────────┐ │ └──────────────────┘ └───────────────┘
- // │HomeStack │─▶│ HomeStackManager │──▶│HomeStackContext │◀─┤
- // └──────────┘ └───────────────────┘ └─────────────────┘ │ ┌─────────────────┐ ┌────────────┐
- // └──│ DocStackContext │───▶│DocStackPage│
- // └─────────────────┘ └────────────┘
- //
- //
- class HomeStack extends StatelessWidget {
- static GlobalKey<ScaffoldState> scaffoldKey = GlobalKey();
- // final Size size;
- const HomeStack({Key? key}) : super(key: key);
- @override
- Widget build(BuildContext context) {
- Log.info('HomePage build');
- return Column(
- mainAxisAlignment: MainAxisAlignment.start,
- children: [
- getIt<HomeStackManager>().stackTopBar(),
- Expanded(
- child: Container(
- color: Colors.white,
- child: FocusTraversalGroup(
- child: getIt<HomeStackManager>().stackWidget(),
- ),
- ),
- ),
- ],
- );
- }
- }
- class FadingIndexedStack extends StatefulWidget {
- final int index;
- final List<Widget> children;
- final Duration duration;
- const FadingIndexedStack({
- Key? key,
- required this.index,
- required this.children,
- this.duration = const Duration(
- milliseconds: 250,
- ),
- }) : super(key: key);
- @override
- _FadingIndexedStackState createState() => _FadingIndexedStackState();
- }
- class _FadingIndexedStackState extends State<FadingIndexedStack> {
- double _targetOpacity = 1;
- @override
- void didUpdateWidget(FadingIndexedStack oldWidget) {
- if (oldWidget.index == widget.index) return;
- setState(() => _targetOpacity = 0);
- Future.delayed(1.milliseconds, () => setState(() => _targetOpacity = 1));
- super.didUpdateWidget(oldWidget);
- }
- @override
- Widget build(BuildContext context) {
- return TweenAnimationBuilder<double>(
- duration: _targetOpacity > 0 ? widget.duration : 0.milliseconds,
- tween: Tween(begin: 0, end: _targetOpacity),
- builder: (_, value, child) {
- return Opacity(opacity: value, child: child);
- },
- child: IndexedStack(index: widget.index, children: widget.children),
- );
- }
- }
|