是否可以在 Flutter Web 的同一页面中创建指向部分的链接?
Posted
技术标签:
【中文标题】是否可以在 Flutter Web 的同一页面中创建指向部分的链接?【英文标题】:Is it possible to create links to sections in the same page in flutter web? 【发布时间】:2020-07-01 15:52:54 【问题描述】:我想使用 Flutter Web 创建一个网站,但我无法导航到同一页面中的部分。这是我想使用颤振实现的一个示例。
附:导航器不工作:
【问题讨论】:
您可以通过综合浏览量实现这一目标 您能否再解释一下如何使用综合浏览量来实现这一目标? 【参考方案1】:我用 PageView
创建了一个示例class MyHomePage extends StatelessWidget
var list = ["Home","Services", "Work", "About"];
var colors = [Colors.orange, Colors.blue, Colors.red, Colors.green];
PageController controller = PageController();
@override
Widget build(BuildContext context)
return Scaffold(
body: SafeArea(
child: Column(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Row(
children: <Widget>[
Container(
width: 50,
height: 50,
margin: EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(10)
),
),
Spacer(),
Row(
children: List.generate(3, (index)
return GestureDetector(
onTap: ()
_scrollToIndex(index);
,
child: Container(
margin: EdgeInsets.all(8),
child: Text(
list[index+1]
),
),
);
),
)
],
),
Expanded(
child : PageView(
scrollDirection: Axis.vertical,
pageSnapping: false,
controller: controller,
children: List.generate(list.length, (index)
return Container(
width: MediaQuery.of(context).size.width,
height: double.maxFinite,
color: colors[index],
child: Center(
child: Text(
list[index],
style: TextStyle(
color: Colors.white,
fontSize: 50
),
),
),
);
)
),
),
],
)
),
);
void _scrollToIndex(int index)
controller.animateToPage(index + 1, duration: Duration(seconds: 2), curve: Curves.fastLinearToSlowEaseIn);
输出:
【讨论】:
【参考方案2】:ScrollController 就是你要找的东西。
向您的 ScrollView 添加一个新的,您可以设置您希望它滚动到的位置。
【讨论】:
【参考方案3】:Josteve 提到了一种方法。但我想展示另一种方式,它提供更多功能,正如您在 gif 示例中所期望的那样。
您可以在此处查看演示:https://mohith7548.github.io/portfolio/
我的项目有 3 个部分,分别称为 About、Blog 和 Projects。它还有另一个称为 Home 的顶部部分。所以屏幕的顺序是主页、关于、博客和项目。每个部分都采用全屏高度和宽度。所以这些页面的起始偏移量分别是[0 * screenHeight, 1 * screenHeight, 2 * screenHeight, 3 * screenHeight]
。 screenHeight
可以通过 MediaQuery.of(context).size.height
在 build
方法中访问。
class Portfolio extends StatefulWidget
@override
_Portfoliostate createState() => _PortfolioState();
class _PortfolioState extends State<Portfolio>
ScrollController _scrollController;
String _curNavItem;
static double offsetHome = 0;
static double offsetAbout = SizeConfig.screenHeight;
static double offsetBlog = 2 * SizeConfig.screenHeight;
static double offsetProjects = 3 * SizeConfig.screenHeight;
@override
void initState()
super.initState();
_scrollController = ScrollController();
@override
void dispose()
super.dispose();
_scrollController.dispose();
void scrollTo(String title)
double offset = 0;
switch (title)
case Constants.HOME:
offset = offsetHome;
break;
case Constants.ABOUT:
offset = offsetAbout;
break;
case Constants.BLOG:
offset = offsetBlog;
break;
case Constants.PROJECTS:
offset = offsetProjects;
break;
setState(()
_curNavItem = title;
);
// animate to the pag
_scrollController.animateTo(
offset,
duration: Duration(milliseconds: 500),
curve: Curves.easeInOutQuart,
);
@override
Widget build(BuildContext context)
return Scaffold(
body: CustomScrollView(
physics: PageScrollPhysics(), // use NeverScrollableScrollPhysics() to block user scrolling
controller: _scrollController,
slivers: <Widget>[
// This is just SliverAppBar wrapped in InterheritedWidget called NavState
// You can use just SliverAppBar
NavState(
curNavItem: _curNavItem,
scrollTo: scrollTo,
child: AppBanner(key: _appBannerKey), // SliverAppBar in another file
),
SliverList(
delegate: SliverChildListDelegate([
About(),
Blog(),
Projects(),
]),
)
],
),
);
【讨论】:
以上是关于是否可以在 Flutter Web 的同一页面中创建指向部分的链接?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在使用 Jira 凭据的 asp.net mvc 应用程序中创建登录页面?