Skip to main content

w_tools_app 1.0.1 copy "w_tools_app: ^1.0.1" to clipboard
w_tools_app: ^1.0.1 copied to clipboard

w_tools 的应用启动层:提供 WApp 启动器、插件依赖编排、GetX 路由与语言切换、底部弹窗与路由观察者,帮助快速搭建应用骨架。

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:w_tools_app/w_tools_app.dart';

import 'pages/detail_page.dart';
import 'pages/home_page.dart';

/// 示例启动日志:便于观察插件依赖顺序。
final List<String> startupEvents = <String>[];

/// 路由事件:演示插件 navigatorObservers。
final ValueNotifier<List<String>> routeEvents = ValueNotifier<List<String>>(<String>[]);

class _DemoRouteObserver extends NavigatorObserver {
  void _add(String event) {
    routeEvents.value = [...routeEvents.value, event];
  }

  @override
  void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
    _add('push ${route.settings.name ?? '(unnamed)'}');
  }

  @override
  void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
    _add('pop ${route.settings.name ?? '(unnamed)'}');
  }
}

class EnvPlugin extends WAppPlugin {
  @override
  String get name => 'env';

  @override
  Future<void> onInit() async {
    await Future<void>.delayed(const Duration(milliseconds: 80));
    startupEvents.add('env: loaded');
  }
}

class PresentationPlugin extends WAppPlugin {
  @override
  String get name => 'presentation';

  @override
  Future<void> onInit() async {
    startupEvents.add('presentation: hooks ready');
  }

  @override
  TransitionBuilder? get builderWrapper => (context, child) {
    final theme = Theme.of(context);
    return Theme(
      data: theme.copyWith(
        colorScheme: theme.colorScheme.copyWith(secondary: Colors.amber),
      ),
      child: child ?? const SizedBox.shrink(),
    );
  };

  @override
  Widget wrapApp(Widget child) => RepaintBoundary(child: child);
}

class RouteObserverPlugin extends WAppPlugin {
  @override
  String get name => 'route-observer';

  @override
  List<NavigatorObserver>? get navigatorObservers => [_DemoRouteObserver()];
}

class FeaturePlugin extends WAppPlugin {
  @override
  String get name => 'feature';

  @override
  List<String> get dependsOn => const ['env'];

  @override
  Future<void> onInit() async {
    startupEvents.add('feature: ready');
  }
}

WApp createApp() {
  WAppConfig.supportedLanguages = {
    'zh_CN': '简体中文',
    'en_US': 'English',
  };

  return WApp()
    ..title = 'w_tools_app 示例'
    ..initialRoute = '/'
    ..theme = ThemeData(
      colorSchemeSeed: const Color(0xFF0EA5E9),
      useMaterial3: true,
    )
    ..appWrapper = ((child) => RepaintBoundary(child: child))
    ..builder = ((context, child) => MediaQuery(
      data: MediaQuery.of(context).copyWith(
        textScaler: const TextScaler.linear(1.0),
      ),
      child: child ?? const SizedBox.shrink(),
    ))
    ..getPages = [
      GetPage(name: '/', page: () => const HomePage()),
      GetPage(name: '/detail', page: () => const DetailPage()),
    ]
    ..addPlugins([
      PresentationPlugin(),
      RouteObserverPlugin(),
      FeaturePlugin(),
      EnvPlugin(),
    ]);
}

Future<void> main() async {
  await createApp().start(
    customTasks: [
      Future<void>.delayed(
        const Duration(milliseconds: 120),
        () => startupEvents.add('custom task: done'),
      ),
    ],
    onLazyInit: () => startupEvents.add('first frame: lazy init'),
  );
}
0
likes
145
points
60
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

w_tools 的应用启动层:提供 WApp 启动器、插件依赖编排、GetX 路由与语言切换、底部弹窗与路由观察者,帮助快速搭建应用骨架。

Homepage
Repository (GitHub)
View/report issues
Contributing

Topics

#flutter #getx #routing #app-starter

License

MIT (license)

Dependencies

flutter, get

More

Packages that depend on w_tools_app