2017-12-31 157 views

Antwort

4

klauen So deaktivieren Sie einstellen können:

PageView(physics:new NeverScrollableScrollPhysics()) 
0

Also ich habe versucht, dies herauszufinden, wie folgt, und wenn jemand eine bessere Lösung hat, teilen Sie es bitte mit uns.

eine Schaltfläche in den PageView zum nächsten Punkt gehen Fabrikat:

ein PageController zu Ihrem PageView hinzufügen und den Methoden animateTo oder jumpTo auf den gewünschten Punkt zu gehen, wenn der Benutzer eine Taste drückt. Ich habe es so gemacht, dass die gesamte Breite der aktuellen Ansicht der Versatz ist, so dass der Übergang zum nächsten Gegenstand erfolgreich erfolgt.

onPressed:() { 
     c.animateTo(MediaQuery 
      .of(context) 
      .size 
      .width, duration: new Duration(seconds: 1), 
      curve: Curves.easeIn); 
     } 

Deaktivieren Sie die Standard klauen Verhalten:

Alles, was ich tat, war meine PageView innen IgnorePointer einpacken jede Interaktion mit dem Benutzer zu ignorieren, ich diese Lösung nicht gefällt wirklich, kann es gut funktionieren in In diesem Beispiel möchte ich jedoch in anderen Situationen, dass der Benutzer mit einem einzelnen Widget auf der aktuell angezeigten Seite interagieren soll.

Das ist mein Beispielcode:

enter image description here

class FirstPage extends StatefulWidget { 
    @override 
    _FirstPageState createState() => new _FirstPageState(); 
} 

class _FirstPageState extends State<FirstPage> { 
    ScrollController c; 

    @override 
    void initState() { 
    super.initState(); 
    c = new PageController(); 
    } 

    @override 
    Widget build(BuildContext context) { 
    return new Scaffold(
     floatingActionButton: new Row(
     mainAxisAlignment: MainAxisAlignment.end, 
     crossAxisAlignment: CrossAxisAlignment.end, 

     children: <Widget>[ 
      new FloatingActionButton(
       child: new Icon(Icons.navigate_before), onPressed:() { 
      //c.animateTo(MediaQuery.of(context).size.width, duration: new Duration(seconds: 1), curve: Curves.easeIn); 
      c.jumpTo(0.0); 
      }), 
      new Container(width: 15.0,), 
      new FloatingActionButton(
       child: new Icon(Icons.navigate_next), onPressed:() { 
      c.animateTo(MediaQuery 
       .of(context) 
       .size 
       .width, duration: new Duration(seconds: 1), 
       curve: Curves.easeIn); 
      }), 
     ],), 
     appBar: new AppBar(title: new Text("First Page")), 
     body: new IgnorePointer(child: new PageView(
     controller: c, 
     children: <Widget>[ 
      new Column (
       children: <Widget>[new Container (child: new Text("First Item")) 
       ]), 
      new Container (child: new Text("Second Item")), 
     ], 
    ),), 
    ); 
    } 
} 

Irgendwelche Vorschläge oder Änderungen an dieser Lösung sind willkommen.

Verwandte Themen