如何使用flutter中的textfield导航到一个页面到另一个页面?
我在ListView中添加了62个pdf页面如何使用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
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插件显示??