Я пытаюсь синхронизировать два свитка вместе, и мне удалось переместить их, используя один, но не другой.
Я использовал метод controller
jumpTo
, чтобы установитьдругие offset
.но я получаю ошибку stack overflow
, если я касаюсь другого свитка.
в моем примере (ниже), хорошо, если я прокручиваю "MOVE
".но как только я прикоснусь к «FOLLOW
», он выдаст мне ошибку, и мне придется перезапустить приложение.
каково объяснение этого?как мне это исправить?
в конечном итоге я хочу иметь МНОГИЕ свитки, которые могут двигаться вот так, но мне нужно, чтобы "TEXT HERE
" не двигался между ними.
ниже мое целое main.dart
, пожалуйста, попробуйте.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var c1 = ScrollController(); // controller declaration
var c2 = ScrollController();
@override void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
print('start');
return Scaffold(
appBar: AppBar(
title: new Text('data test'),
),
body: new Container( //===================================
padding: EdgeInsets.all(30),
color: Colors.blue[100],
height: 200,
child: NotificationListener<ScrollNotification>(
child: Column(
children: <Widget>[
Text('SOME TEXT HERE'),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
controller: c1, // KONTROLER
child: Container(height: 50, color: Colors.green[100], child: Row( children: <Widget>[
Container(width: 100,child: Text('+MOOOVE -')),
Container(width: 100,child: Text('-MOOOVE -')),
Container(width: 100,child: Text('-MOOOVE -')),
Container(width: 100,child: Text('*MOOOVE *')),
Container(width: 100,child: Text('-MOOOVE -')),
Container(width: 100,child: Text('-MOOOVE -')),
Container(width: 100,child: Text('-MOOOVE +')),
],),)
),
Text('ANOTHER TEXT HERE'),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
controller: c2, // KONTROLER
child: Container(height: 50, color: Colors.red[100], child: Row(children: <Widget>[
Container(width: 100,child: Text('+ FOLLOW-')),
Container(width: 100,child: Text('- FOLLOW-')),
Container(width: 100,child: Text('- FOLLOW-')),
Container(width: 100,child: Text('* FOLLOW*')),
Container(width: 100,child: Text('- FOLLOW-')),
Container(width: 100,child: Text('- FOLLOW-')),
Container(width: 100,child: Text('- FOLLOW+')),
],),)
),
]),
onNotification: (ScrollNotification scrollinfo) { // HEY!! LISTEN!!
c2.jumpTo( c1.offset ); // c1 is controlling c2's offset
print('OFFSET--'+c1.offset.toInt().toString()+"--"+c2.offset.toInt().toString());
},
)
), // ===================
);
}
}
спасибо.