Flutter响应式布局插件go_responsive_annotation的使用
Flutter响应式布局插件go_responsive_annotation的使用
GoResponsive MIT
一个受responsive_framework
连续逻辑和基于上下文的响应式数据以及responsive_builder
响应式小部件启发的简单但表达性强的响应式框架。生成所有定义的断点作为可选参数,以及必需的默认小部件参数。
特性
GoResponsive通过以下方式使响应式设计变得简单:
- 生成带有所有定义的断点的
GoResponsiveWidget
,并带有一个必需的默认小部件参数。 - 在BuildContext上生成
context.goResponsiveValue<T>
扩展方法,以便可以设置类型化的值。 - 在BuildContext上生成
context.is{breakpoint_name}
扩展方法,以便可以在条件中使用。 - 生成
GoResponsiveBreakpoints.{breakpoint_name}
字符串字段用于断点名称。
开始使用
依赖项
dependencies:
...
go_responsive: <version>
go_responsive_annotation: <version>
dev_dependencies:
...
build_runner: <version>
go_responsive_generator: <version>
使用示例
1. 定义go_responsive.dart
import 'package:flutter/widgets.dart';
import 'package:go_responsive/go_responsive.dart';
import 'package:go_responsive_annotation/go_responsive_annotation.dart';
part 'go_responsive.g.dart';
@goResponsive
const breakpoints = [
GoResponsiveBreakpoint(size: 600, name: 'compact'),
GoResponsiveBreakpoint(size: 840, name: 'medium'),
GoResponsiveBreakpoint(size: double.maxFinite, name: 'expanded'),
];
2. 在MaterialApp
的构建器函数中返回GoResponsiveBuilder
,并将断点设置为已定义的breakpoints
列表。
class App extends StatelessWidget {
const App({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: const Home(),
builder: (context, child) {
return GoResponsiveBuilder(
breakpoints: breakpoints,
child: child,
);
},
);
}
}
3. 运行dart run build_runner build
在控制台中生成go_responsive.g.dart
4. 导入go_responsive.dart
,然后可以使用context.goResponsiveValue
class Home extends StatelessWidget {
const Home({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Container(
color: context.goResponsiveValue(
compact: Colors.red,
medium: Colors.green,
expanded: Colors.blue,
defaultValue: Colors.black,
),
),
);
}
}
5. 使用或GoResponsiveWidget
class Home2 extends StatelessWidget {
const Home2({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: GoResponsiveWidget(
compact: Container(color: Colors.red),
medium: Container(color: Colors.green),
expanded: Container(color: Colors.blue),
defaultWidget: Container(color: Colors.black),
),
);
}
}
6. 或者使用context.is{breakpoint_name}
与if else
class Home3 extends StatelessWidget {
const Home3({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
var color = Colors.black;
if (context.isCompact) {
color = Colors.red;
}
if (context.isMedium) {
color = Colors.green;
}
if (context.isExpanded) {
color = Colors.blue;
}
return Scaffold(
body: Container(color: color),
);
}
}
7. 或者使用context.goResponsiveData
和GoResponsiveBreakpoints.{breakpoint_name}
组合以实现自定义条件
class Home4 extends StatelessWidget {
const Home4({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
var color = Colors.black;
if (context.goResponsiveData.smallerOrEqualTo(GoResponsiveBreakpoints.compact)) {
color = Colors.red;
}
if (context.goResponsiveData.between(
GoResponsiveBreakpoints.compact,
GoResponsiveBreakpoints.expanded,
)) {
color = Colors.green;
}
if (context.goResponsiveData.between(
GoResponsiveBreakpoints.medium,
GoResponsiveBreakpoints.expanded,
)) {
color = Colors.blue;
}
return Scaffold(
body: Container(color: color),
);
}
}
更多关于Flutter响应式布局插件go_responsive_annotation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter响应式布局插件go_responsive_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
go_responsive_annotation
是一个用于 Flutter 的响应式布局插件,它通过注解的方式帮助开发者更方便地实现响应式布局。该插件允许你通过定义不同的屏幕尺寸和布局规则,自动调整 UI 在不同设备上的显示效果。
以下是如何使用 go_responsive_annotation
插件的详细步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 go_responsive_annotation
和 go_router
依赖:
dependencies:
flutter:
sdk: flutter
go_responsive_annotation: ^1.0.0
go_router: ^5.0.0
dev_dependencies:
build_runner: ^2.1.0
go_responsive_builder: ^1.0.0
2. 创建响应式布局类
接下来,创建一个类并使用 @Responsive
注解来定义不同屏幕尺寸下的布局规则。
import 'package:go_responsive_annotation/go_responsive_annotation.dart';
part 'responsive_layout.g.dart';
@Responsive()
class ResponsiveLayout {
@ResponsiveProperty()
double get padding => _padding;
double _padding;
@ResponsiveProperty()
double get fontSize => _fontSize;
double _fontSize;
ResponsiveLayout({
required double padding,
required double fontSize,
}) : _padding = padding,
_fontSize = fontSize;
factory ResponsiveLayout.small() => ResponsiveLayout(
padding: 8.0,
fontSize: 14.0,
);
factory ResponsiveLayout.medium() => ResponsiveLayout(
padding: 16.0,
fontSize: 16.0,
);
factory ResponsiveLayout.large() => ResponsiveLayout(
padding: 24.0,
fontSize: 18.0,
);
}
3. 生成代码
运行以下命令生成响应式布局类的代码:
flutter pub run build_runner build
这将生成 responsive_layout.g.dart
文件,其中包含了根据屏幕尺寸自动选择的布局规则。
4. 在应用中使用响应式布局
在 Flutter 应用中使用生成的响应式布局类:
import 'package:flutter/material.dart';
import 'responsive_layout.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Responsive Layout Example'),
),
body: ResponsiveLayoutBuilder(
small: ResponsiveLayout.small(),
medium: ResponsiveLayout.medium(),
large: ResponsiveLayout.large(),
builder: (context, layout) {
return Padding(
padding: EdgeInsets.all(layout.padding),
child: Text(
'Hello, World!',
style: TextStyle(fontSize: layout.fontSize),
),
);
},
),
),
);
}
}
5. 自定义屏幕尺寸
你可以在 ResponsiveLayoutBuilder
中自定义屏幕尺寸的断点:
ResponsiveLayoutBuilder(
small: ResponsiveLayout.small(),
medium: ResponsiveLayout.medium(),
large: ResponsiveLayout.large(),
breakpoints: ResponsiveBreakpoints(
small: 600,
medium: 900,
large: 1200,
),
builder: (context, layout) {
return Padding(
padding: EdgeInsets.all(layout.padding),
child: Text(
'Hello, World!',
style: TextStyle(fontSize: layout.fontSize),
),
);
},
)