link_page.dart 2.04 KB
import 'dart:io';

import 'package:appframe/bloc/link_cubit.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) {
          final scaffold = 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,
                    ),
                  )
                : const Center(child: CircularProgressIndicator(color: Color(0xFF7691fa))),
          );

          if (Platform.isIOS) {
            return scaffold;
          }

          return PopScope(
            canPop: false,
            onPopInvokedWithResult: (didPop, result) async {
              debugPrint("");
              debugPrint("^^^^^^^^^^^^^^ Link page PopScope $didPop ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ${DateTime.now().toString()}");
              debugPrint("");
              if (didPop) return;
              await ctx.read<LinkCubit>().handleBack(ctx);
            },
            child: scaffold,
          );
        },
        listener: (context, state) {},
      ),
    );
  }
}