Untitled

 avatar
unknown
dart
3 years ago
1.4 kB
5
Indexable
/* Flutter & Dart */
import 'package:flutter/material.dart';
import 'dart:convert';

/* External */
import 'package:appscheme/appscheme.dart';

class ListenAppSheme extends StatefulWidget {
  final Widget child;
  final void Function(String) shemeFn;

  ListenAppSheme({
    required this.child,
    required this.shemeFn,
  });

  @override
  State<ListenAppSheme> createState() => _ListenAppShemeState();
}

class _ListenAppShemeState extends State<ListenAppSheme> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance?.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance?.removeObserver(this);
    super.dispose();
  }

  Future<String?> getSharedData() async {
    try {
      AppScheme appScheme = AppSchemeImpl.getInstance();

      SchemeEntity sheme = await appScheme.getLatestScheme();
      return json.encode(sheme.query);
    } catch (e) {
      return null;
    }
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) async {
    if (state == AppLifecycleState.resumed) {
      await getSharedData().then((value) {
        if (value != null) {
          handleSharedData(value);
        }
      });
    }
  }

  void handleSharedData(String? sharedData) async {
    if (sharedData != null) {
      widget.shemeFn(sharedData);
    }
  }

  @override
  Widget build(BuildContext context) {
    return widget.child;
  }
}
Editor is loading...