Anonymous
Изменение порядка платформы (iframe) в стеке приводит к сбою рендеринга
Сообщение
Anonymous » 03 май 2025, 12:25
Возможным исправлением было бы избежать использования клавиш в позиционном виджете (L: 42), но это приведет к тому, что внутреннее состояние HTMlelementemeview (или других отображаемых элементов, таких как видео) для сброса их состояния по мере их фактически утилизируется. Тем не менее, я подозреваю, что это связано с SDK Dom & Flutter. < /P>
Код: Выделить всё
import 'dart:html' as html;
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => const MaterialApp(home: MyHomePage());
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
List order = [
1,
2,
];
void _reverseOrder() {
setState(() {
order = order.reversed.toList();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Test'),
),
body: Stack(
children: order
.map((o) => Positioned(
key: Key(o.toString() + o.toString()),
/*
key is used
*/
left: o * 100,
top: o * 100,
width: o * 250,
height: o * 250,
child: Stack(
children: [
child(o),
Center(child: Text(o.toString())),
],
),
))
.toList()),
floatingActionButton: FloatingActionButton(
onPressed: _reverseOrder,
tooltip: 'Reverse order of widgets',
child: const Icon(Icons.refresh),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
Widget child(int id) {
return createIFrame(
'sample.pdf',
id.toString(),
);
// // Works without issues with non platform widgets
// return Container(
// color: Color.fromARGB(255, 100 * id, 100 * id, 100 * id),
// );
}
Widget createIFrame(
String url,
String id,
) {
ui.platformViewRegistry.registerViewFactory(
id,
(int viewId) => html.IFrameElement()..src = url,
);
return HtmlElementView(viewType: id);
}
Полезные ссылки:
htmlelementview
Платформа-Views-USING-Html-Slots-web
Подробнее здесь:
https://stackoverflow.com/questions/717 ... der-to-fai
1746264344
Anonymous
Возможным исправлением было бы избежать использования клавиш в позиционном виджете (L: 42), но это приведет к тому, что внутреннее состояние HTMlelementemeview (или других отображаемых элементов, таких как видео) для сброса их состояния по мере их фактически утилизируется. Тем не менее, я подозреваю, что это связано с SDK Dom & Flutter. < /P> [code]import 'dart:html' as html; import 'dart:ui' as ui; import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) => const MaterialApp(home: MyHomePage()); } class MyHomePage extends StatefulWidget { const MyHomePage({Key? key}) : super(key: key); @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { List order = [ 1, 2, ]; void _reverseOrder() { setState(() { order = order.reversed.toList(); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Test'), ), body: Stack( children: order .map((o) => Positioned( key: Key(o.toString() + o.toString()), /* key is used */ left: o * 100, top: o * 100, width: o * 250, height: o * 250, child: Stack( children: [ child(o), Center(child: Text(o.toString())), ], ), )) .toList()), floatingActionButton: FloatingActionButton( onPressed: _reverseOrder, tooltip: 'Reverse order of widgets', child: const Icon(Icons.refresh), ), // This trailing comma makes auto-formatting nicer for build methods. ); } } Widget child(int id) { return createIFrame( 'sample.pdf', id.toString(), ); // // Works without issues with non platform widgets // return Container( // color: Color.fromARGB(255, 100 * id, 100 * id, 100 * id), // ); } Widget createIFrame( String url, String id, ) { ui.platformViewRegistry.registerViewFactory( id, (int viewId) => html.IFrameElement()..src = url, ); return HtmlElementView(viewType: id); } [/code] Полезные ссылки: htmlelementview Платформа-Views-USING-Html-Slots-web Подробнее здесь: [url]https://stackoverflow.com/questions/71797207/changing-the-order-of-platformviews-iframe-in-a-stack-causes-the-render-to-fai[/url]