-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.dart
129 lines (119 loc) · 4.8 KB
/
main.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import 'dart:io';
import 'dart:ui';
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
// import 'package:flutter_custom_cursor/flutter_custom_cursor.dart';
// import 'package:flame/flame.dart';
import 'package:window_manager/window_manager.dart';
import 'package:data_table_2/data_table_2.dart';
import 'package:provider/provider.dart';
import 'package:samsara/samsara.dart';
// import 'ui/view/location/location.dart';
import 'app.dart';
// import 'ui/editor/editor.dart';
// import 'ui/view/character/character.dart';
// import 'ui/view/information/information.dart';
import 'engine.dart';
// import 'ui/overlay/main_game.dart';
import 'state/states.dart';
// class CustomWindowListener extends WindowListener {
// @override
// void onWindowResize() async {
// engine.info(
// '窗口大小修改为:${GameConfig.screenSize.width}x${GameConfig.screenSize.height}');
// GameConfig.screenSize = await windowManager.getSize();
// }
// }
class NoThumbScrollBehavior extends ScrollBehavior {
@override
Set<PointerDeviceKind> get dragDevices => {
PointerDeviceKind.touch,
PointerDeviceKind.mouse,
PointerDeviceKind.stylus,
PointerDeviceKind.trackpad,
};
}
void main() {
dataTableShowLogs = false;
runZonedGuarded(() async {
WidgetsFlutterBinding.ensureInitialized();
// 对于Flutter没有捕捉到的错误,弹出系统原生对话框
PlatformDispatcher.instance.onError = (error, stackTrace) {
final statck = trimStackTrace(stackTrace);
engine.error('$error\n$statck');
alertNativeError(error, statck);
return false;
};
// 对于Flutter捕捉到的错误,弹出Flutter绘制的自定义对话框
FlutterError.onError = (details) {
engine.error(details.toString());
FlutterError.presentError(details);
alertFlutterError(details);
};
assert(Platform.isLinux || Platform.isWindows || Platform.isMacOS);
await windowManager.ensureInitialized();
// windowManager.addListener(CustomWindowListener());
await windowManager.setMaximizable(false);
await windowManager.setResizable(false);
const windowSize = Size(1440.0, 900.0);
await windowManager.waitUntilReadyToShow(
const WindowOptions(
title: 'Heavenly Tribulation',
// fullScreen: true,
size: windowSize,
maximumSize: windowSize,
minimumSize: windowSize,
), () async {
await windowManager.show();
await windowManager.focus();
engine.debug('系统版本:${Platform.operatingSystemVersion}');
});
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => engine),
ChangeNotifierProvider(create: (_) => SelectedTileState()),
ChangeNotifierProvider(create: (_) => GameSavesState()),
ChangeNotifierProvider(create: (_) => EditorToolState()),
ChangeNotifierProvider(create: (_) => HistoryState()),
ChangeNotifierProvider(create: (_) => GameDialogState()),
ChangeNotifierProvider(create: (_) => CurrentNpcList()),
ChangeNotifierProvider(create: (_) => QuestState()),
ChangeNotifierProvider(create: (_) => GameUIOverlayVisibilityState()),
ChangeNotifierProvider(create: (_) => HeroState()),
ChangeNotifierProvider(create: (_) => EnemyState()),
ChangeNotifierProvider(create: (_) => ViewPanelState()),
ChangeNotifierProvider(create: (_) => ViewPanelPositionState()),
ChangeNotifierProvider(create: (_) => HoverInfoContentState()),
ChangeNotifierProvider(create: (_) => HoverInfoDeterminedRectState()),
],
child: MaterialApp(
scrollBehavior: NoThumbScrollBehavior().copyWith(scrollbars: false),
debugShowCheckedModeBanner: false,
theme: GameConfig.appTheme,
home: GameApp(key: mainKey),
// 控件绘制时发生错误,用一个显示错误信息的控件替代
builder: (context, widget) {
ErrorWidget.builder = (FlutterErrorDetails details) {
String stack = '';
if (details.stack != null) {
stack = trimStackTrace(details.stack!);
}
final Object exception = details.exception;
Widget error = ErrorWidget.withDetails(
message: '$exception\n$stack',
error: exception is FlutterError ? exception : null);
if (widget is Scaffold || widget is Navigator) {
error = Scaffold(body: Center(child: error));
}
return error;
};
if (widget != null) return widget;
throw ('error trying to create error widget!');
},
),
),
);
}, alertNativeError);
}