Flutter Twitter 克隆:带有动画的简单入门
很高兴为您提供帮助!以下是一个简单的模仿 Twitter 主页面的 Flutter 代码,带有一些基本动画效果。您可以自己添加更多的动画效果和自定义样式来使其更加完善。此代码使用了假数据。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Twitter Clone',
home: TwitterHomePage(),
);
}
}
class TwitterHomePage extends StatefulWidget {
@override
_TwitterHomePageState createState() => _TwitterHomePageState();
}
class _TwitterHomePageState extends State<TwitterHomePage>
with TickerProviderStateMixin {
AnimationController _ac;
Animation<Offset> _anim;
@override
void initState() {
super.initState();
_ac = AnimationController(
vsync: this,
duration: Duration(milliseconds: 500),
);
_anim = Tween<Offset>(
begin: Offset(-1.0, 0),
end: Offset(0, 0),
).animate(_ac);
}
@override
void dispose() {
_ac.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.menu),
onPressed: () {
_ac.forward();
},
),
title: Text('Home'),
actions: [
IconButton(
icon: Icon(Icons.search),
onPressed: () {},
),
],
),
body: SafeArea(
child: Stack(
children: [
ListView.builder(
itemBuilder: (context, index) {
return Padding(
padding: EdgeInsets.all(8.0),
child: Container(
height: 100,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.0),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 2,
blurRadius: 5,
offset: Offset(0, 3),
),
],
),
child: Row(
children: [
Container(
width: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.0),
image: DecorationImage(
image: NetworkImage(
'https://via.placeholder.com/150'),
fit: BoxFit.cover,
),
),
),
SizedBox(width: 8.0),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'User Name',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18.0,
),
),
SizedBox(height: 8.0),
Text(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
],
),
),
],
),
),
);
},
),
SlideTransition(
position: _anim,
child: Container(
width: MediaQuery.of(context).size.width * 0.7,
height: MediaQuery.of(context).size.height,
color: Colors.grey[200],
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 16.0),
Padding(
padding: EdgeInsets.all(16.0),
child: Row(
children: [
CircleAvatar(
backgroundImage: NetworkImage('https://via.placeholder.com/150'),
),
SizedBox(width: 16.0),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'User Name',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18.0,
),
),
SizedBox(height: 8.0),
Text(
'user@twitter.com',
style: TextStyle(
color: Colors.grey[600],
),
),
],
),
],
),
),
Divider(),
ListTile(
leading: Icon(Icons.home),
title: Text('Home'),
onTap: () {},
),
ListTile(
leading: Icon(Icons.person),
title: Text('Profile'),
onTap: () {},
),
ListTile(
leading: Icon(Icons.settings),
title: Text('Settings'),
onTap: () {},
),
Divider(),
ListTile(
title: Text('Logout'),
onTap: () {},
),
],
),
),
),
],
),
),
);
}
}
这段代码使用了ListView和ListView.builder来创建带有假数据的推文列表。它还使用了Stack和SlideTransition来创建一个侧边栏,当用户点击菜单按钮时可以从左侧滑出。
您可以下载并运行此代码,以便更好地理解。希望这可以帮助您开始编写类似 Twitter 的 Flutter 应用程序!
原文地址: https://www.cveoy.top/t/topic/okag 著作权归作者所有。请勿转载和采集!