flutter_duit
119 строк · 2.6 Кб
1import 'dart:async';
2
3import 'package:duit_kernel/duit_kernel.dart';
4import 'package:example/src/registry_example.dart';
5import 'package:flutter/material.dart';
6import 'package:flutter_duit/flutter_duit.dart';
7
8final class _Handler implements ExternalEventHandler {
9@override
10FutureOr<void> handleCustomEvent(
11BuildContext context, String key, Object? extra) {
12switch (key) {
13case "event1":
14{
15debugPrint("Event 1");
16break;
17}
18case "event2":
19{
20debugPrint("Event 2");
21break;
22}
23}
24}
25
26@override
27FutureOr<void> handleNavigation(
28BuildContext context, String path, Object? extra) {
29// TODO: implement handleNavigation
30throw UnimplementedError();
31}
32
33@override
34FutureOr<void> handleOpenUrl(String url) {
35// TODO: implement handleOpenUrl
36throw UnimplementedError();
37}
38}
39
40void main() async {
41WidgetsFlutterBinding.ensureInitialized();
42DuitRegistry.register(
43"ExampleCustomWidget",
44modelFactory: modelMapperExample,
45buildFactory: exampleRenderer,
46attributesFactory: exampleAttributeMapper,
47);
48
49final worker = DuitWorkerPool();
50await worker.initWithConfiguration(
51DuitWorkerPoolConfiguration(
52workerCount: 6,
53policy: TaskDistributionPolicy.roundRobin,
54),
55);
56
57DuitRegistry.registerWorkerPool(worker);
58runApp(const MyApp());
59}
60
61class MyApp extends StatelessWidget {
62const MyApp({super.key});
63
64@override
65Widget build(BuildContext context) {
66return MaterialApp(
67title: 'Flutter Demo',
68theme: ThemeData(
69colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
70),
71home: const MyHomePage(),
72);
73}
74}
75
76class MyHomePage extends StatefulWidget {
77const MyHomePage({super.key});
78
79@override
80State<MyHomePage> createState() => _MyHomePageState();
81}
82
83class _MyHomePageState extends State<MyHomePage> {
84late final DuitDriver driver1;
85
86@override
87void initState() {
88driver1 = DuitDriver(
89"/example_screen",
90transportOptions: HttpTransportOptions(
91defaultHeaders: {"Content-Type": "application/json"},
92baseUrl: "http://localhost:8999",
93),
94eventHandler: _Handler(),
95);
96super.initState();
97}
98
99@override
100void dispose() {
101driver1.dispose();
102super.dispose();
103}
104
105@override
106Widget build(BuildContext context) {
107return Scaffold(
108body: SafeArea(
109child: Center(
110child: DuitViewHost(
111context: context,
112driver: driver1,
113placeholder: const CircularProgressIndicator(),
114),
115),
116),
117);
118}
119}
120