generated from dellevin/template
适配windows(测试)
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:io';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
@@ -7,6 +8,7 @@ import 'package:provider/provider.dart';
|
|||||||
import 'package:dynamic_color/dynamic_color.dart';
|
import 'package:dynamic_color/dynamic_color.dart';
|
||||||
import 'package:flutter_quill/flutter_quill.dart' as quill;
|
import 'package:flutter_quill/flutter_quill.dart' as quill;
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||||
import 'pages/home_page.dart';
|
import 'pages/home_page.dart';
|
||||||
import 'utils/theme/app_theme.dart';
|
import 'utils/theme/app_theme.dart';
|
||||||
import 'utils/app_router.dart';
|
import 'utils/app_router.dart';
|
||||||
@@ -21,6 +23,11 @@ final RouteObserver<ModalRoute<void>> routeObserver = RouteObserver<ModalRoute<v
|
|||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
// Windows 桌面:使用 FFI 初始化 sqflite
|
||||||
|
if (Platform.isWindows) {
|
||||||
|
sqfliteFfiInit();
|
||||||
|
databaseFactory = databaseFactoryFfi;
|
||||||
|
}
|
||||||
await UserPrefs.init();
|
await UserPrefs.init();
|
||||||
final appProvider = AppProvider();
|
final appProvider = AppProvider();
|
||||||
runApp(MyApp(appProvider: appProvider));
|
runApp(MyApp(appProvider: appProvider));
|
||||||
|
|||||||
@@ -977,17 +977,19 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
body: ListView(
|
body: ListView(
|
||||||
children: [
|
children: [
|
||||||
_buildSectionHeader('显示设置'),
|
_buildSectionHeader('显示设置'),
|
||||||
_buildNavigationItem(
|
if (!Platform.isWindows)
|
||||||
icon: Icons.apps_outlined,
|
_buildNavigationItem(
|
||||||
title: '应用图标',
|
icon: Icons.apps_outlined,
|
||||||
subtitle: '更换桌面应用图标',
|
title: '应用图标',
|
||||||
onTap: () => Navigator.push(context,
|
subtitle: '更换桌面应用图标',
|
||||||
MaterialPageRoute(builder: (_) => const AppIconPickerPage())),
|
onTap: () => Navigator.push(context,
|
||||||
),
|
MaterialPageRoute(builder: (_) => const AppIconPickerPage())),
|
||||||
Divider(
|
),
|
||||||
height: 0.5,
|
if (!Platform.isWindows)
|
||||||
indent: 24,
|
Divider(
|
||||||
endIndent: 24,
|
height: 0.5,
|
||||||
|
indent: 24,
|
||||||
|
endIndent: 24,
|
||||||
color: colors.outlineVariant),
|
color: colors.outlineVariant),
|
||||||
_buildNavigationItem(
|
_buildNavigationItem(
|
||||||
icon: Icons.tune_outlined,
|
icon: Icons.tune_outlined,
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
import 'dart:io';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
import '../models/data_models.dart';
|
import '../models/data_models.dart';
|
||||||
import 'slide_up_page_route.dart';
|
import 'slide_up_page_route.dart';
|
||||||
import '../pages/movies/movie_form_page.dart';
|
import '../pages/movies/movie_form_page.dart';
|
||||||
@@ -13,7 +15,7 @@ import '../pages/note_plus/note_plus_detail_page.dart';
|
|||||||
|
|
||||||
/// 路由生成器
|
/// 路由生成器
|
||||||
class AppRouter {
|
class AppRouter {
|
||||||
static Route<dynamic> generateRoute(RouteSettings settings) {
|
static Route<dynamic>? generateRoute(RouteSettings settings) {
|
||||||
switch (settings.name) {
|
switch (settings.name) {
|
||||||
case '/movie-form':
|
case '/movie-form':
|
||||||
final args = settings.arguments;
|
final args = settings.arguments;
|
||||||
@@ -64,6 +66,11 @@ class AppRouter {
|
|||||||
if (url == null) {
|
if (url == null) {
|
||||||
return _buildUnknownRoute(settings.name);
|
return _buildUnknownRoute(settings.name);
|
||||||
}
|
}
|
||||||
|
if (Platform.isWindows) {
|
||||||
|
// Windows 无 webview 支持,用系统浏览器打开
|
||||||
|
launchUrl(Uri.parse(url));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return SlideUpPageRoute(page: DoubanWebViewPage(url: url));
|
return SlideUpPageRoute(page: DoubanWebViewPage(url: url));
|
||||||
|
|
||||||
case '/note-plus-form':
|
case '/note-plus-form':
|
||||||
|
|||||||
32
pubspec.lock
32
pubspec.lock
@@ -453,6 +453,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.0"
|
version: "0.4.0"
|
||||||
|
glob:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: glob
|
||||||
|
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
hooks:
|
hooks:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -669,6 +677,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.0"
|
||||||
|
native_toolchain_c:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: native_toolchain_c
|
||||||
|
sha256: f9c168717100ae6d9fee9ffb0be379bf1f8b26b0f6bcbd4fdddcd931993a6a72
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.19.2"
|
||||||
nested:
|
nested:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1034,6 +1050,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.8"
|
version: "2.5.8"
|
||||||
|
sqflite_common_ffi:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: sqflite_common_ffi
|
||||||
|
sha256: cd0c7f7de39a08f2d54ef144d9058c46eca8461879aaa648025643455c1e5a20
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.0+3"
|
||||||
sqflite_darwin:
|
sqflite_darwin:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1050,6 +1074,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.0"
|
version: "2.4.0"
|
||||||
|
sqlite3:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqlite3
|
||||||
|
sha256: "37356bcb56ce0d9404d602c41e4bdb7765e7e9732a3e47adb3d98c556a6abdad"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.3.3"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ dependencies:
|
|||||||
provider: ^6.1.2
|
provider: ^6.1.2
|
||||||
fl_chart: ^0.69.0
|
fl_chart: ^0.69.0
|
||||||
sqflite: ^2.3.0
|
sqflite: ^2.3.0
|
||||||
|
sqflite_common_ffi: ^2.3.0
|
||||||
path: ^1.8.3
|
path: ^1.8.3
|
||||||
image_picker: ^1.0.4
|
image_picker: ^1.0.4
|
||||||
path_provider: ^2.1.1
|
path_provider: ^2.1.1
|
||||||
|
|||||||
@@ -38,3 +38,10 @@ target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
|
|||||||
|
|
||||||
# Run the Flutter tool portions of the build. This must not be removed.
|
# Run the Flutter tool portions of the build. This must not be removed.
|
||||||
add_dependencies(${BINARY_NAME} flutter_assemble)
|
add_dependencies(${BINARY_NAME} flutter_assemble)
|
||||||
|
|
||||||
|
# Bundle sqlite3.dll for sqflite_common_ffi
|
||||||
|
add_custom_command(TARGET ${BINARY_NAME} POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/sqlite3.dll"
|
||||||
|
"$<TARGET_FILE_DIR:${BINARY_NAME}>/sqlite3.dll"
|
||||||
|
)
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
|||||||
FlutterWindow window(project);
|
FlutterWindow window(project);
|
||||||
Win32Window::Point origin(10, 10);
|
Win32Window::Point origin(10, 10);
|
||||||
Win32Window::Size size(1280, 720);
|
Win32Window::Size size(1280, 720);
|
||||||
if (!window.Create(L"mooknote", origin, size)) {
|
if (!window.Create(L"MookNote", origin, size)) {
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
window.SetQuitOnClose(true);
|
window.SetQuitOnClose(true);
|
||||||
|
|||||||
BIN
windows/runner/sqlite3.dll
Normal file
BIN
windows/runner/sqlite3.dll
Normal file
Binary file not shown.
@@ -197,6 +197,12 @@ Win32Window::MessageHandler(HWND hwnd,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
case WM_GETMINMAXINFO: {
|
||||||
|
auto info = reinterpret_cast<MINMAXINFO*>(lparam);
|
||||||
|
info->ptMinTrackSize.x = 360;
|
||||||
|
info->ptMinTrackSize.y = 640;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
case WM_SIZE: {
|
case WM_SIZE: {
|
||||||
RECT rect = GetClientArea();
|
RECT rect = GetClientArea();
|
||||||
if (child_content_ != nullptr) {
|
if (child_content_ != nullptr) {
|
||||||
|
|||||||
Reference in New Issue
Block a user