Closed Taron133 closed 1 year ago
Hi @Taron133 .
You should keep the controller in your State
and set the areas
parameter.
Examples (changing the second area)
_controller.areas = [Area(), Area(weight: .1)];
_controller.areas = [Area(), Area(size: 150)];
@caduandrade i use this method change size will Exception
Widget build(BuildContext context) {
return MultiSplitView(
controller: _controller,
children: [
LayoutBuilder(builder: (k, b) {
if (b.minWidth > 300) {
_controller.areas = [Area(weight: 0.2), Area()];
}
return Column(
children: [
Padding(
padding: const EdgeInsets.only(top: 10, bottom: 10, left: 10),
child: Row(
children: [
IconButton(
onPressed: () {},
icon: Icon(FluentIcons.add_20_regular)),
IconButton(
onPressed: () {},
icon: Icon(FluentIcons.add_20_regular)),
IconButton(
onPressed: () {},
icon: Icon(FluentIcons.add_20_regular)),
IconButton(
onPressed: () {},
icon: Icon(FluentIcons.add_20_regular)),
],
),
),
Expanded(child: TabBody())
],
);
}),
Container(
color: Colors.grey,
)
],
);
}
======== Exception caught by gesture ===============================================================
The following _CastError was thrown while handling a gesture:
Null check operator used on a null value
When the exception was thrown, this was the stack:
#0 _MultiSplitViewState._onDragEnd (package:multi_split_view/src/multi_split_view.dart:603:32)
#1 _MultiSplitViewState._populateHorizontalChildren.<anonymous closure> (package:multi_split_view/src/multi_split_view.dart:497:48)
#2 DragGestureRecognizer._checkEnd.<anonymous closure> (package:flutter/src/gestures/monodrag.dart:521:47)
#3 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:253:24)
#4 DragGestureRecognizer._checkEnd (package:flutter/src/gestures/monodrag.dart:521:5)
#5 DragGestureRecognizer.didStopTrackingLastPointer (package:flutter/src/gestures/monodrag.dart:426:9)
#6 OneSequenceGestureRecognizer.stopTrackingPointer (package:flutter/src/gestures/recognizer.dart:446:9)
#7 DragGestureRecognizer._giveUpPointer (package:flutter/src/gestures/monodrag.dart:435:5)
#8 DragGestureRecognizer.handleEvent (package:flutter/src/gestures/monodrag.dart:354:7)
#9 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:98:12)
#10 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:143:9)
#11 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:617:13)
#12 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:141:18)
#13 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:127:7)
#14 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:460:19)
#15 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:440:22)
#16 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:337:11)
#17 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:395:7)
#18 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:357:5)
#19 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:314:7)
#20 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:295:7)
#21 _invoke1 (dart:ui/hooks.dart:167:13)
#22 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:341:7)
#23 _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)
Handler: "onEnd"
Recognizer: HorizontalDragGestureRecognizer#67121
debugOwner: GestureDetector
start behavior: start
flutter version
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.3.0, on macOS 12.4 21F79 darwin-x64, locale zh-Hans-CN)
[✗] Android toolchain - develop for Android devices
✗ Unable to locate Android SDK.
Install Android Studio from: https://developer.android.com/studio/index.html
On first launch it will assist you in installing the Android SDK components.
(or visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions).
If the Android SDK has been installed to a custom location, please use
`flutter config --android-sdk` to update to that location.
[✓] Xcode - develop for iOS and macOS (Xcode 13.3)
[✗] Chrome - develop for the web (Cannot find Chrome executable at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome)
! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[!] Android Studio (not installed)
[✓] IntelliJ IDEA Ultimate Edition (version 2021.1.3)
[✓] VS Code (version 1.70.2)
[!] Proxy Configuration
! NO_PROXY is not set
[✓] Connected device (1 available)
[✓] HTTP Host Availability
Hi @labulakalia!
Can you use the 2.3.0
version and wrap the setter with a Future
? Can't rebuild and set state at the same time.
import 'package:flutter/material.dart';
import 'package:multi_split_view/multi_split_view.dart';
void main() => runApp(MultiSplitViewExampleApp());
class MultiSplitViewExampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Example(),
);
}
}
class Example extends StatefulWidget {
@override
_ExampleState createState() => _ExampleState();
}
class _ExampleState extends State<Example> {
MultiSplitViewController _controller = MultiSplitViewController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: MultiSplitView(
controller: _controller,
children: [
LayoutBuilder(builder: (context, constraints) {
if (constraints.minWidth > 600) {
Future.microtask(
() => _controller.areas = [Area(weight: 0.2), Area()]);
}
return Container(
color: Colors.blue,
child: Center(
child:
Text('constraints.minWidth: ${constraints.minWidth}')));
}),
Container(color: Colors.green)
],
));
}
}
I can resize in old versions:
But can't in new version