欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Flutter之用户输入网络数据缓存

Flutter之用户输入网络数据缓存

2025/4/7 9:21:18 来源:https://blog.csdn.net/zouyang920/article/details/147023540  浏览:    关键词:Flutter之用户输入网络数据缓存

目录:

    • 1、处理用户输入
      • 1.1、按钮
      • 1.2、文本
      • 1.3、富文本
      • 1.4、TextField
      • 1.5、Form
    • 2、复选框、Switch 和 Radio
      • 2.1、复选框
      • 2.2、Switch
      • 2.3、Radio
    • 3、选择日期或时间
    • 4、滑动
    • 5、网络和数据
    • 6、本地缓存
      • 6.1、在本地内存中缓存数据
    • 7、web端和Flutter样式控制对比
      • 7.1、文本样式与对齐
      • 7.2、设置背景颜色
      • 7.3、居中元素
      • 7.4、设置容器宽度
      • 7.5、设置绝对位置
      • 7.6、旋转元素
      • 7.7、缩放元素
      • 7.8、圆角
      • 7.8、文字间距调整

1、处理用户输入

在这里插入图片描述

1.1、按钮

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

int count = 0;
Widget build(BuildContext context) {return ElevatedButton(style: ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20),),onPressed: () {setState(() {count += 1;});},child: const Text('Enabled'),);
}

1.2、文本

在这里插入图片描述
在这里插入图片描述


Widget build(BuildContext context) {return const SelectableText('''
Two households, both alike in dignity,
In fair Verona, where we lay our scene,
From ancient grudge break to new mutiny,
Where civil blood makes civil hands unclean.
From forth the fatal loins of these two foes''');
}

1.3、富文本

在这里插入图片描述
在这里插入图片描述


Widget build(BuildContext context) {return RichText(text: TextSpan(text: 'Hello ',style: DefaultTextStyle.of(context).style,children: const <TextSpan>[TextSpan(text: 'bold', style: TextStyle(fontWeight: FontWeight.bold)),TextSpan(text: ' world!'),],),);
}

1.4、TextField

在这里插入图片描述

1.5、Form

在这里插入图片描述

final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
Widget build(BuildContext context) {return Form(key: _formKey,child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[TextFormField(decoration: const InputDecoration(hintText: 'Enter your email',),validator: (String? value) {if (value == null || value.isEmpty) {return 'Please enter some text';}return null;},),Padding(padding: const EdgeInsets.symmetric(vertical: 16.0),child: ElevatedButton(onPressed: () {// Validate returns true if the form is valid, or false otherwise.if (_formKey.currentState!.validate()) {// Process data.}},child: const Text('Submit'),),),],),);
}

2、复选框、Switch 和 Radio

2.1、复选框

在这里插入图片描述
在这里插入图片描述

bool isChecked = false;
Widget build(BuildContext context) {return Checkbox(checkColor: Colors.white,value: isChecked,onChanged: (bool? value) {setState(() {isChecked = value!;});},);
}

2.2、Switch

在这里插入图片描述

bool light = true;
Widget build(BuildContext context) {return Switch(// This bool value toggles the switch.value: light,activeColor: Colors.red,onChanged: (bool value) {// This is called when the user toggles the switch.setState(() {light = value;});},);
}

2.3、Radio

在这里插入图片描述
在这里插入图片描述

enum Character { musician, chef, firefighter, artist }class RadioExample extends StatefulWidget {const RadioExample({super.key});State<RadioExample> createState() => _RadioExampleState();
}class _RadioExampleState extends State<RadioExample> {Character? _character = Character.musician;void setCharacter(Character? value) {setState(() {_character = value;});}Widget build(BuildContext context) {return Column(children: <Widget>[ListTile(title: const Text('Musician'),leading: Radio<Character>(value: Character.musician,groupValue: _character,onChanged: setCharacter,),),ListTile(title: const Text('Chef'),leading: Radio<Character>(value: Character.chef,groupValue: _character,onChanged: setCharacter,),),ListTile(title: const Text('Firefighter'),leading: Radio<Character>(value: Character.firefighter,groupValue: _character,onChanged: setCharacter,),),ListTile(title: const Text('Artist'),leading: Radio<Character>(value: Character.artist,groupValue: _character,onChanged: setCharacter,),),],);}
}

3、选择日期或时间

在这里插入图片描述
在这里插入图片描述

DateTime? selectedDate;
Widget build(BuildContext context) {var date = selectedDate;return Column(children: [Text(date == null? "You haven't picked a date yet.": DateFormat('MM-dd-yyyy').format(date),),ElevatedButton.icon(icon: const Icon(Icons.calendar_today),onPressed: () async {var pickedDate = await showDatePicker(context: context,initialEntryMode: DatePickerEntryMode.calendarOnly,initialDate: DateTime.now(),firstDate: DateTime(2019),lastDate: DateTime(2050),);setState(() {selectedDate = pickedDate;});},label: const Text('Pick a date'),)]);
}

4、滑动

在这里插入图片描述
在这里插入图片描述

List<int> items = List<int>.generate(100, (int index) => index);
Widget build(BuildContext context) {return ListView.builder(itemCount: items.length,padding: const EdgeInsets.symmetric(vertical: 16),itemBuilder: (BuildContext context, int index) {return Dismissible(background: Container(color: Colors.green,),key: ValueKey<int>(items[index]),onDismissed: (DismissDirection direction) {setState(() {items.removeAt(index);});},child: ListTile(title: Text('Item ${items[index]}',),),);},);
}

5、网络和数据

在这里插入图片描述

import 'package:http/http.dart' as http;void main() async {var response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/albums/1'),);print(response.body);
}

6、本地缓存

在这里插入图片描述

Data? _cachedData;Future<Data> get data async {// Step 1: Check whether your cache already contains the desired dataif (_cachedData == null) {// Step 2: Load the data if the cache was empty_cachedData = await _readData();}// Step 3: Return the value in the cachereturn _cachedData!;
}

6.1、在本地内存中缓存数据

在这里插入图片描述

class UserRepository {UserRepository(this.api);final Api api;final Map<int, User?> _userCache = {};Future<User?> loadUser(int id) async {if (!_userCache.containsKey(id)) {final response = await api.get(id);if (response.statusCode == 200) {_userCache[id] = User.fromJson(response.body);} else {_userCache[id] = null;}}return _userCache[id];}
}

7、web端和Flutter样式控制对比

在 Flutter 中,为了保持语法简洁, “Lorem ipsum” 文本的默认样式由如下 bold24Roboto 变量定义:

TextStyle bold24Roboto = const TextStyle(color: Colors.white,fontSize: 24,fontWeight: FontWeight.bold,
);

7.1、文本样式与对齐

在这里插入图片描述

<div class="grey-box">Lorem ipsum
</div>.grey-box {background-color: #e0e0e0; /* grey 300 */width: 320px;height: 240px;font: 900 24px Georgia;
}
final container = Container(// grey boxwidth: 320,height: 240,color: Colors.grey[300],child: const Text('Lorem ipsum',style: TextStyle(fontFamily: 'Georgia',fontSize: 24,fontWeight: FontWeight.bold,),textAlign: TextAlign.center,),
);

7.2、设置背景颜色

final container = Container(// grey boxwidth: 320,height: 240,color: Colors.grey[300],child: Text('Lorem ipsum',style: bold24Roboto,),
);
final container = Container(// grey boxwidth: 320,height: 240,decoration: BoxDecoration(color: Colors.grey[300],),child: Text('Lorem ipsum',style: bold24Roboto,),
);

7.3、居中元素

在这里插入图片描述

final container = Container(// grey boxwidth: 320,height: 240,color: Colors.grey[300],child: Center(child: Text('Lorem ipsum',style: bold24Roboto,),),
);

7.4、设置容器宽度

在这里插入图片描述

final container = Container(// grey boxwidth: 320,height: 240,color: Colors.grey[300],child: Center(child: Container(// red boxwidth: 240, // max-width is 240padding: const EdgeInsets.all(16),decoration: BoxDecoration(color: Colors.red[400],),child: Text('Lorem ipsum',style: bold24Roboto,),),),
);

7.5、设置绝对位置

在这里插入图片描述

final container = Container(// grey boxwidth: 320,height: 240,color: Colors.grey[300],child: Stack(children: [Positioned(// red boxleft: 24,top: 24,child: Container(padding: const EdgeInsets.all(16),decoration: BoxDecoration(color: Colors.red[400],),child: Text('Lorem ipsum',style: bold24Roboto,),),),],),
);

7.6、旋转元素

在这里插入图片描述

final container = Container(// grey boxwidth: 320,height: 240,color: Colors.grey[300],child: Center(child: Transform(alignment: Alignment.center,transform: Matrix4.identity()..rotateZ(15 * 3.1415927 / 180),child: Container(// red boxpadding: const EdgeInsets.all(16),decoration: BoxDecoration(color: Colors.red[400],),child: Text('Lorem ipsum',style: bold24Roboto,textAlign: TextAlign.center,),),),),
);

7.7、缩放元素

在这里插入图片描述

final container = Container(// grey boxwidth: 320,height: 240,color: Colors.grey[300],child: Center(child: Transform(alignment: Alignment.center,transform: Matrix4.identity()..scale(1.5),child: Container(// red boxpadding: const EdgeInsets.all(16),decoration: BoxDecoration(color: Colors.red[400],),child: Text('Lorem ipsum',style: bold24Roboto,textAlign: TextAlign.center,),),),),
);

7.8、圆角

在这里插入图片描述

final container = Container(// grey boxwidth: 320,height: 240,color: Colors.grey[300],child: Center(child: Container(// red circlepadding: const EdgeInsets.all(16),decoration: BoxDecoration(color: Colors.red[400],borderRadius: const BorderRadius.all(Radius.circular(8),),),child: Text('Lorem ipsum',style: bold24Roboto,),),),
);

7.8、文字间距调整

在这里插入图片描述

final container = Container(// grey boxwidth: 320,height: 240,color: Colors.grey[300],child: Center(child: Container(// red boxpadding: const EdgeInsets.all(16),decoration: BoxDecoration(color: Colors.red[400],),child: const Text('Lorem ipsum',style: TextStyle(color: Colors.white,fontSize: 24,fontWeight: FontWeight.w900,letterSpacing: 4,),),),),
);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词