我想在應用程式頂部顯示一個最小化的可移動呼叫螢屏
我嘗試使用堆疊它不符合我的期望
uj5u.com熱心網友回復:
@Raiyan,您必須使用畫中畫概念來實作這樣的浮動孩子。
在 Flutter 中,有多個插件可供我們使用,其中一些如下:
可悲的是 gif 無法正常作業......但是通過在綠色視窗上點擊和拖動將使綠色視窗移動。
嘗試這個:
import 'dart:math'; import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter ; }); } @override Widget build(BuildContext context) { return OverlayWindow( overlayChild: Column( mainAxisAlignment: MainAxisAlignment.center, children: const [ Text( "Overlay Window", style: TextStyle(fontSize: 20), ), Icon( Icons.android, size: 80, ), ], ), child: Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ const Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headlineMedium, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: const Icon(Icons.add), ), ), ); } } class OverlayWindow extends StatefulWidget { const OverlayWindow( {Key? key, required this.overlayChild, required this.child}) : super(key: key); final Widget overlayChild; final Widget child; @override State<OverlayWindow> createState() => _OverlayWindowState(); } class _OverlayWindowState extends State<OverlayWindow> { double _top = 0; double _left = 0; @override Widget build(BuildContext context) { return Stack( children: [ widget.child, Positioned( top: _top, left: _left, child: GestureDetector( onPanUpdate: (details) { setState(() { _top = max(0, _top details.delta.dy); _left = max(0, _left details.delta.dx); }); }, child: Container( height: 300, width: 200, color: Colors.green, child: widget.overlayChild, ), ), ) ], ); } }更多類似的事情,你可以在這里找到:
https://docs.flutter.dev/development/ui/advanced/gestures
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520887.html標籤:扑镖
