link_page.dart 1.7 KB
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'];

    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('adv'),
                centerTitle: true,
                automaticallyImplyLeading: false,
                leading: IconButton(
                  icon: const Icon(Icons.arrow_back),
                  onPressed: () async {
                    await ctx.read<LinkCubit>().handleBack(ctx);
                  },
                ),
              ),
              body: state.loaded
                  ? SizedBox(
                      height: MediaQuery.of(ctx).size.height - 120, // 减去100像素留空
                      child: WebViewWidget(controller: ctx.read<LinkCubit>().controller),
                    )
                  : const Center(child: CircularProgressIndicator()),
            ),
          );
        },
        listener: (context, state) {},
      ),
    );
  }
}