我正在開發一個 Windows 顫振應用程式。該應用程式已經有移動版本,我正在轉換為 Windows。移動設計已經存在,但我需要將其轉換為 Windows,問題是設計還沒有準備好。
出于這個原因,我接到了一項任務,要找出如何為應用程式提供最大寬度和高度,以便用戶無法使用滑鼠更改應用程式螢屏大小。
有沒有辦法在 Flutter windows 上實作這個?
uj5u.com熱心網友回復:
是的,我們可以通過使用window_size包來限制 Windows Flutter 應用程式的大小。
要在我們的應用程式中使用它,我們需要將它添加到我們的pubspec.yaml依賴項中:
dependencies:
flutter:
sdk: flutter
window_size:
git:
url: git://github.com/google/flutter-desktop-embedding.git
path: plugins/window_size
并在初始化時使用它,如下所示:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:window_size/window_size.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
if (Platform.isWindows) {
setWindowMaxSize(const Size(1024, 768));
setWindowMinSize(const Size(512, 384));
}
runApp(MyApp());
}
uj5u.com熱心網友回復:
METHOD 1
正如@Stefano 提到的,我可以使用這個庫:
dependencies:
window_size:
git:
url: git://github.com/google/flutter-desktop-embedding.git
path: plugins/window_size
.
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:window_size/window_size.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
if (Platform.isWindows) {
setWindowMaxSize(const Size(1024, 768));
setWindowMinSize(const Size(512, 384));
Future<Null>.delayed(Duration(seconds: 1), () {
setWindowFrame(Rect.fromCenter(center: Offset(1000, 500), width: 600, height: 1000));
});
}
runApp(MyApp());
}
但這里的問題是視窗大小被設定為默認值,因此它會在幾秒鐘后更改其大小。
METHOD 2
因為,第一種方法沒有像我預期的那樣作業,我混合了這兩種方法:
在main.dart 中:
void main() {
WidgetsFlutterBinding.ensureInitialized();
if (Platform.isWindows) {
setWindowMaxSize(const Size(1024, 768));
setWindowMinSize(const Size(512, 384));
}
runApp(MyApp());
}
在lib/windows/runner/win32_window.cpp : // 這個方法已經存在于檔案中 bool Win32Window::CreateAndShow(const std::wstring& title, const Point& origin, const Size& size) { Destroy();
const wchar_t* window_class =
WindowClassRegistrar::GetInstance()->GetWindowClass();
const POINT target_point = {static_cast<LONG>(/*x // change here to move to center*/ 550), // before -> origin.x
static_cast<LONG>(/*y // change here to move vertically*/ origin.y)}; // before -> origin.y
HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST);
UINT dpi = FlutterDesktopGetDpiForMonitor(monitor);
double scale_factor = dpi / 96.0;
HWND window = CreateWindow(
window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
Scale(/* x // move to center */ 550, scale_factor), Scale(/* y // move screen vertically */ origin.y, scale_factor),// before -> origin.x, origin.y
Scale(/* width // set default width */ 450, scale_factor), Scale(/* height // set default height */ 800, scale_factor), // before -> size.width, size.height
nullptr, nullptr, GetModuleHandle(nullptr), this);
if (!window) {
return false;
}
return OnCreate();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340228.html
上一篇:焦點焦點節點上的顫動余量
下一篇:'User?'型別的值無法從“_userFromFirebaseUser”方法回傳,因為它的回傳型別為“User”
