Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用flutter中的textfield导航到一个页面到另一个页面?_Flutter_Dart_Scroll - Fatal编程技术网

如何使用flutter中的textfield导航到一个页面到另一个页面?

如何使用flutter中的textfield导航到一个页面到另一个页面?,flutter,dart,scroll,Flutter,Dart,Scroll,我在ListView中添加了62个pdf页面 class MyApp extends StatefulWidget { String _pdfPath; int currentPage; ScrollController Controller = ScrollController(); set PdfPath(String path) { if (path != _pdfPath) { _pdfPath = path; } } @over

我在ListView中添加了62个pdf页面

class MyApp extends StatefulWidget {
  String _pdfPath;
  int currentPage;
  ScrollController Controller = ScrollController();


  set PdfPath(String path) {
    if (path != _pdfPath) {
      _pdfPath = path;
    }
  }

  @override
  _NativePdfState createState() => _NativePdfState(_pdfPath,currentPage);
}

class _NativePdfState extends State<MyApp> {
  String _pdfPath;
  int _currentPage;
  BottomToolbar bottomToolbar = new BottomToolbar();

  _NativePdfState(String pdfPath,int currentPage) {
    _pdfPath = pdfPath;
    _currentPage= currentPage;
  }
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Column(children: [
      Expanded(
        child: FutureBuilder(
            future: Pdfviewerplugin.getImages(_pdfPath),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              if (snapshot.hasData) {
                int listLength = (snapshot.data as List).length;

                return ScrollBar(
                  currentPage: (offset) {
                    final int currentItem = widget.Controller.hasClients
                        ? (widget.Controller.offset / widget.Controller.position.maxScrollExtent * listLength).floor() : 0;
                    _currentPage = currentItem;
                    print(currentItem);
                    if (currentItem + 1 == 63) {
                      return 62;
                    }
                    return currentItem + 1;
                  },
                  controller: widget.Controller,
                  child: ListView.builder(
                      controller: widget.Controller,
                      itemCount: listLength,
                      itemBuilder: (BuildContext context, int index) {
                        return Center(
                          child: Builder(builder: (context) {
                            if (index == (snapshot.data as List).length - 1) {
                              return Container(
                                //margin:  EdgeInsets.fromLTRB(0, 0, 0, 5),
                                child: (snapshot.data[index]),
                              );
                            } else {
                              return Container(
                                margin: EdgeInsets.fromLTRB(0, 0, 0, 5),
                                child: (snapshot.data[index]),
                              );
                            }
                          }),
                        );
                      }),
                );
              } else {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
            }),
      ),
      Expanded(
        child: bottomToolbar,
        flex: 0,
      ),
    ]);
  }
}
类MyApp扩展StatefulWidget{
字符串_pdfPath;
int当前页面;
ScrollController=ScrollController();
设置PdfPath(字符串路径){
如果(路径!=\u pdfPath){
_pdfPath=路径;
}
}
@凌驾
_NativePdfState createState()=>\u NativePdfState(\u pdfPath,currentPage);
}
类_NativePdfState扩展状态{
字符串_pdfPath;
int_当前页面;
BottomToolbar-BottomToolbar=新的BottomToolbar();
_NativePdfState(字符串pdfPath,int currentPage){
_pdfPath=pdfPath;
_currentPage=currentPage;
}
@凌驾
void initState(){
//TODO:实现initState
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回列(子项:[
扩大(
孩子:未来建设者(
未来:Pdfviewerplugin.getImages(_pdfPath),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
int listLength=(snapshot.data作为列表).length;
返回滚动条(
当前页:(偏移){
final int currentItem=widget.Controller.hasClients
?(widget.Controller.offset/widget.Controller.position.maxScrollExtent*listLength).floor():0;
_currentPage=currentItem;
打印(当前项目);
如果(当前项+1==63){
返回62;
}
返回当前项+1;
},
控制器:widget.controller,
子项:ListView.builder(
控制器:widget.controller,
itemCount:listLength,
itemBuilder:(构建上下文,int索引){
返回中心(
子:生成器(生成器:(上下文){
如果(索引==(snapshot.data作为列表).length-1){
返回容器(
//边距:从LTRB(0,0,0,5)开始的边距集,
子:(snapshot.data[索引],
);
}否则{
返回容器(
边距:从LTRB(0,0,0,5)开始的边距集,
子:(snapshot.data[索引],
);
}
}),
);
}),
);
}否则{
返回中心(
子对象:CircularProgressIndicator(),
);
}
}),
),
扩大(
孩子:下工具栏,
弹性:0,
),
]);
}
}
然后我在底部工具栏中添加了textfield

class PageEntry extends StatefulWidget {
  final Color foregroundColor;
  final Color backgroundColor;
  final double height;
  final double width;
  final bool isVisible;
  PageEntry({
    this.height = 24,
    this.width = 35,
    this.isVisible = true,
    this.backgroundColor = const Color(0xFFFFFFFF),
    this.foregroundColor,
  });
  @override
  _PageEntryState createState() => _PageEntryState();
}
class _PageEntryState extends State<PageEntry> {
  var currentPage;
    TextEditingController _controller = TextEditingController();

    void initState() {
      super.initState();
      _controller.addListener(() {
                int currentPageNumber = int.parse(_controller.text);         
      });
    }
void onSumbitted(String value){
      setState(() {
        int currentPageNumber = int.parse(_controller.text);
     });
}
    void dispose() {
      _controller.dispose();
      super.dispose();
    }

    @override
    Widget build(BuildContext context) {
      if (widget.isVisible) {
        return Container(
          height: widget.height,
          width: widget.width,
          color: widget.backgroundColor,
          foregroundDecoration: BoxDecoration(
            border: Border.all(color: Colors.grey),
          ),
          child: TextField(
            keyboardType: TextInputType.number,
            textAlign: TextAlign.center,
            controller: _controller,
            onSubmitted: onSumbitted,
          ),
        );
      } else {
        return Container();
      }
    }
  }
class PageEntry扩展了StatefulWidget{
最终颜色前底色;
最终颜色背景色;
最终双倍高度;
最终双倍宽度;
最终布尔值可见;
页面输入({
这个高度=24,
这个宽度=35,
this.isVisible=true,
this.backgroundColor=const Color(0xFFFFFFFF),
这是前底色,
});
@凌驾
_PageEntryState createState()=>\u PageEntryState();
}
类_PageEntryState扩展状态{
var-currentPage;
TextEditingController _controller=TextEditingController();
void initState(){
super.initState();
_controller.addListener(){
int currentPageNumber=int.parse(_controller.text);
});
}
未指定的无效(字符串值){
设置状态(){
int currentPageNumber=int.parse(_controller.text);
});
}
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
if(widget.isVisible){
返回容器(
高度:widget.height,
宽度:widget.width,
颜色:widget.backgroundColor,
前场装饰:盒子装饰(
边框:边框。全部(颜色:颜色。灰色),
),
孩子:TextField(
键盘类型:TextInputType.number,
textAlign:textAlign.center,
控制器:_控制器,
未提交:未提交,
),
);
}否则{
返回容器();
}
}
}
若我给textfield指定了任何数字(62以内),那个么页面应该滚动到给定的页面。 例如,如果我给3,页面应该滚动到第3页

然后,如果我滚动到任何一页,该页码应该显示在文本字段中。 例如,若我滚动到第6页,6应该显示在文本字段中


我不知道该怎么做。请帮我解决这个问题。

您正在使用哪个pdf插件显示?您正在使用哪个pdf插件显示??