link_page.dart 2.21 KB
import 'package:appframe/bloc/link_cubit.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import 'package:webview_flutter/webview_flutter.dart';

class LinkPage extends StatelessWidget {
  const LinkPage({super.key});

  @override
  Widget build(BuildContext buildContext) {
    final Map<String, dynamic>? extraData = GoRouterState.of(buildContext).extra as Map<String, dynamic>?;
    final String? url = extraData?['url'];
    final String? title = extraData?['title'];

    return BlocProvider(
      create: (context) => LinkCubit(LinkState(loaded: false, url: url!)),
      child: BlocConsumer<LinkCubit, LinkState>(
        builder: (ctx, state) {
          return PopScope(
            canPop: false,
            onPopInvokedWithResult: (didPop, result) {
              ctx.read<LinkCubit>().handleBack(ctx);
            },
            child: Scaffold(
              appBar: AppBar(
                title: Text(title ?? '', style: TextStyle(color: Colors.white, fontSize: 18)),
                centerTitle: true,
                backgroundColor: Color(0xFF7691FA),
                iconTheme: IconThemeData(color: Colors.white),
              ),
              body: state.loaded
                  ? SizedBox(
                      height: MediaQuery.of(ctx).size.height - 120, // 减去100像素留空
                      child: WebViewWidget(
                        controller: ctx.read<LinkCubit>().controller,
                        gestureRecognizers: {
                          // 允许所有手势
                          Factory<VerticalDragGestureRecognizer>(
                            () => VerticalDragGestureRecognizer(),
                          ),
                          Factory<HorizontalDragGestureRecognizer>(
                            () => HorizontalDragGestureRecognizer(),
                          ),
                        },
                      ),
                    )
                  : const Center(child: CircularProgressIndicator()),
            ),
          );
        },
        listener: (context, state) {},
      ),
    );
  }
}