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

import 'package:appframe/bloc/link_cubit.dart';
import 'package:appframe/ui/widgets/ios_edge_swipe_detector.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'];

    if(Platform.isIOS) {
      // 初始化 iOS 边缘滑动监听
      IosEdgeSwipeDetector.init();

      // 设置滑动回调
      IosEdgeSwipeDetector.onEdgeSwipe(() {
        debugPrint("");
        debugPrint("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
        debugPrint("检测到左边缘滑动,Flutter 收到通知");
        debugPrint("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
        debugPrint("");
      });
    }

    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))),
          );

          // 为所有平台添加PopScope支持
          // return PopScope(
          //   canPop: false,
          //   onPopInvokedWithResult: (didPop, result) async {
          //     // if (didPop) return;
          //     await ctx.read<LinkCubit>().handleBack(ctx);
          //   },
          //   child: scaffold,
          // );

          return scaffold;
        },
        listener: (context, state) {},
      ),
    );
  }
}