1// Copyright 2018 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5import 'package:flutter/material.dart'; 6import 'package:flutter_driver/driver_extension.dart'; 7 8import 'keys.dart' as keys; 9 10void main() { 11 enableFlutterDriverExtension(); 12 13 runApp(MyApp()); 14} 15 16class MyApp extends StatelessWidget { 17 @override 18 Widget build(BuildContext context) { 19 return MaterialApp( 20 title: 'Keyboard & TextField', 21 theme: ThemeData(primarySwatch: Colors.blue), 22 home: MyHomePage(), 23 ); 24 } 25} 26 27class MyHomePage extends StatefulWidget { 28 @override 29 _MyHomePageState createState() => _MyHomePageState(); 30} 31 32class _MyHomePageState extends State<MyHomePage> { 33 final ScrollController _controller = ScrollController(); 34 double offset = 0.0; 35 36 @override 37 void initState() { 38 super.initState(); 39 _controller.addListener(() { 40 setState(() { 41 offset = _controller.offset; 42 }); 43 }); 44 } 45 46 @override 47 Widget build(BuildContext context) { 48 return Scaffold( 49 body: Column( 50 children: <Widget>[ 51 Text('$offset', 52 key: const ValueKey<String>(keys.kOffsetText), 53 ), 54 Expanded( 55 child: ListView( 56 key: const ValueKey<String>(keys.kListView), 57 controller: _controller, 58 children: <Widget>[ 59 Container( 60 height: MediaQuery.of(context).size.height, 61 ), 62 const TextField( 63 key: ValueKey<String>(keys.kDefaultTextField), 64 ), 65 ], 66 ), 67 ), 68 ], 69 ), 70 ); 71 } 72} 73