微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以在Flutter中创建目录按钮?

如何解决是否可以在Flutter中创建目录按钮?

我在enDrawer中创建一个 listTile 。我想要的是,例如,如果我按下 标题 按钮,页面自动滚动到 标题 。请大师帮我..

这是我的ListTile屏幕截图: https://drive.google.com/file/d/1oni6jsQtSgzYMhclHm6QwdozSKtPPglE/view?usp=sharing

这是我的页面截图: https://drive.google.com/file/d/10x--L3NZh5LGGfw-VbpZCWrfNcENR2Kq/view?usp=sharing

我想要在抽屉中按 Headline Two 时,页面自动滚动到 Headline Two 此屏幕截图: https://drive.google.com/file/d/1GZlJnWuFmYK9cYxuTlOroiZBTw9oVvMU/view?usp=sharing

这是我的完整代码

import 'package:Flutter/material.dart';
import 'package:Flutter/services.dart';

class MyStotry extends StatefulWidget {
  @override
  _MyStotryState createState() => _MyStotryState();
}

class _MyStotryState extends State<MyStotry> {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setEnabledsystemUIOverlays([]);
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Color(0xFF41407C),title: Text('The Story of ANU'),),endDrawer: Drawer(
        child: Container(
          child: ListView(
            children: <Widget>[
              Container(
                height: 250,child: DrawerHeader(
                  decoration: Boxdecoration(color: Color(0xFF41407C)),child: Stack(
                    children: <Widget>[
                      Center(
                        child: Text(
                          'Table of Content',style: TextStyle(
                              color: Color(0xFFF8F8F8),fontSize: 20.0),],ListTile(onTap: () {},title: Text('Headline One')),title: Text('Headline Two')),title: Text('Headline Three')),title: Text('Headline Four')),title: Text('Headline Five')),title: Text('Headline Six')),title: Text('Headline Seven')),title: Text('Headline Eight')),title: Text('Headline Nine')),title: Text('Headline Ten')),title: Text('Headline Eleven')),body: SingleChildScrollView(
        child: Padding(
          padding: EdgeInsets.all(20),child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
              Headline1(headline1: 'Headline One'),Content(
                  content:
                      'Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum.'),quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. '),Headline2(headline2: 'Headline Two'),Headline2(headline2: 'Headline Three'),Headline2(headline2: 'Headline Four'),Headline2(headline2: 'Headline Five'),);
  }
}

class Headline1 extends StatelessWidget {
  Headline1({this.headline1});
  final String headline1;
  @override
  Widget build(BuildContext context) {
    return Text(
      headline1,style: TextStyle(
        fontWeight: FontWeight.w800,fontSize: 22,fontFamily: 'Georgia',color: Color(0xFF010101),textAlign: TextAlign.center,);
  }
}

class Headline2 extends StatelessWidget {
  Headline2({this.headline2});
  final String headline2;
  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.only(top: 10,bottom: 10),child: Text(
        headline2,style: TextStyle(
          fontFamily: 'Georgia',fontWeight: FontWeight.w800,fontSize: 18,);
  }
}

class Content extends StatelessWidget {
  Content({this.content});
  final String content;
  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.only(bottom: 10),child: Text(
        content,style: TextStyle(
          height: 1.5,fontFamily: "Georgia",fontSize: 15.0,textAlign: TextAlign.justify,);
  }
}

解决方法

您可以在下面复制粘贴运行完整代码
步骤1:修改类别<Window x:Class="TestMutilColumnMenu.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:TestMutilColumnMenu" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <Style x:Key="MenuItem1" TargetType="{x:Type MenuItem}"> <Setter Property="BorderBrush" Value="DarkGray"/> <Setter Property="Margin" Value="1,1,1"/> </Style> </Window.Resources> <TextBox x:Name = "textBox1" HorizontalAlignment = "Left" Height = "178" Margin = "92,61,0" TextWrapping = "Wrap" Text = "Hi,this is WPF tutorial" VerticalAlignment = "Top" Width = "306"> <TextBox.ContextMenu> <ContextMenu> <ContextMenu.ItemsPanel> <ItemsPanelTemplate> <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> </Grid> </ItemsPanelTemplate> </ContextMenu.ItemsPanel> <MenuItem Grid.Row="0" Grid.Column="0" Header="Item 1" Style="{StaticResource MenuItem1}" > <MenuItem.Icon> <Image Source="/res/Image.png"/> </MenuItem.Icon> </MenuItem> <MenuItem Grid.Row="1" Grid.Column="0" Header="Item 2" Style="{StaticResource MenuItem1}" > <MenuItem.Icon> <Image Source="/res/Image.png"/> </MenuItem.Icon> </MenuItem> <MenuItem Grid.Row="2" Grid.Column="0" Header="Item 3" Style="{StaticResource MenuItem1}" ></MenuItem> <MenuItem Grid.Row="3" Grid.Column="0" Header="Item 4" Style="{StaticResource MenuItem1}" ></MenuItem> <MenuItem Grid.Row="0" Grid.Column="1" Header="Item 5" Style="{StaticResource MenuItem1}" > <MenuItem.Icon> <Image Source="/res/Image.png"/> </MenuItem.Icon> </MenuItem> <MenuItem Grid.Row="1" Grid.Column="1" Header="Item 6" Style="{StaticResource MenuItem1}" > <MenuItem.Icon> <Image Source="/res/Image.png"/> </MenuItem.Icon> </MenuItem> <MenuItem Grid.Row="2" Grid.Column="1" Header="Item 7" Style="{StaticResource MenuItem1}" > <MenuItem.Icon> <Image Source="/res/Image.png"/> </MenuItem.Icon> </MenuItem> <MenuItem Grid.Row="3" Grid.Column="1" Header="Item 8" Style="{StaticResource MenuItem1}" ></MenuItem> <MenuItem Grid.Row="0" Grid.Column="2" Header="Item 9" Style="{StaticResource MenuItem1}" ></MenuItem> <MenuItem Grid.Row="1" Grid.Column="2" Header="Item 10" Style="{StaticResource MenuItem1}" ></MenuItem> </ContextMenu> </TextBox.ContextMenu> </TextBox> 并添加Headline2

Key

第2步:使用 class Headline2 extends StatelessWidget { Headline2({Key key,this.headline2}) : super(key: key); List<GlobalKey>

ScrollController

第3步:将 List<GlobalKey> headLineKeyList = [ GlobalKey(),GlobalKey(),GlobalKey() ]; ScrollController _scrollController = ScrollController(); 放入ScrollController

SingleChildScrollView

第4步:SingleChildScrollView( controller: _scrollController,通过Headline

key: headLineKeyList[0]

步骤5: Headline1(key: headLineKeyList[0],headline1: 'Headline One'),的{​​{1}}呼叫ListTile

onTap

工作演示

enter image description here

完整代码

Scrollable.ensureVisible(headLineKeyList[0].currentContext

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。