问题描述
我尝试使我的应用程序适应性强。我做到了,列表视图更改了语言,但Detailpage不变。我如何重建它?来自sqlite数据库的数据。我尝试使用提供程序没有成功... 我的代码:
home_page.dart:
在这里,我检查屏幕的方向和宽度(仅用于测试700)并构建主屏幕。
import 'package:flut_bount/database_helper.dart';
import 'package:flut_bount/detailed_view.dart';
import 'package:flut_bount/home_screen_list.dart';
import 'package:flut_bount/user.dart';
import 'package:Flutter/cupertino.dart';
import 'package:Flutter/material.dart';
PageController pageController;
var isLargeScreen = false;
List<User> users;
class HomePage extends StatefulWidget {
@override
_HomePagePageState createState() => _HomePagePageState();
}
class _HomePagePageState extends State<HomePage> {
@override
void initState() {
super.initState();
}
int actualPage = 0;
@override
Widget build(BuildContext context) {
Widget _widget;
return
/* Provider<MyModel>(
create: (_) => MyModel(),child: */
Scaffold(
body: OrientationBuilder(
builder: (context,orientation) {
if (MediaQuery.of(context).size.shortestSide > 700 &&
MediaQuery.of(context).orientation == Orientation.landscape) {
isLargeScreen = true;
} else {
isLargeScreen = false;
}
return Row(
children: <Widget>[
Expanded(
flex: 1,child: MyHomeScreenList(),),isLargeScreen
? Expanded(
flex: 2,child: FutureBuilder(
future: DatabaseHelper.getUsers(),builder:
(context,AsyncSnapshot<List<dynamic>> snapshot) {
Widget _widget;
if (snapshot.hasData) {
users = snapshot.data;
/* final model =
Provider.of<MyModel>(context,listen: false);
MyModel().users = users;*/
_widget = DetailedView(users,0);
} else if (snapshot.hasError) {
_widget =
Center(child: Text('Something went wrong'));
} else {
_widget =
Center(child: CircularProgressIndicator());
}
return _widget;
},)
: Container(),],);
},);
}
}
class MyModel with ChangeNotifier {
List<User> _users;
List<User> get users => _users;
set users(value) {
_users = value;
notifyListeners();
}
}
home_screen_list.dart
这是列表视图生成器,平板电脑1/3宽度,右侧为detailview
import 'package:flut_bount/database_helper.dart';
import 'package:flut_bount/detailed_view.dart';
import 'package:flut_bount/drawer.dart';
import 'package:flut_bount/home_page.dart';
import 'package:Flutter/material.dart';
class MyHomeScreenList extends StatefulWidget {
@override
_MyHomeScreenListState createState() => _MyHomeScreenListState();
}
class _MyHomeScreenListState extends State<MyHomeScreenList> {
Widget _widget;
Color _iconColor = Colors.black;
var data;
void _buildWidgets() {
Widget _temp = FutureBuilder(
future: DatabaseHelper.getUsers(),builder: (BuildContext context,AsyncSnapshot<List<dynamic>> snapshot) {
Widget _widget;
if (snapshot.hasData) {
data = snapshot.data;
_widget = ListView.builder(
itemCount: data.length,itemBuilder: (_,int index) {
return ListTile(
leading: Text(data[index].id.toString()),title: Text(data[index].names),subtitle: data[index].jobtitle != null
? Text(data[index].jobtitle)
: null,onTap: () {
isLargeScreen
? pageController.animatetoPage(index,duration: Duration(seconds: 1),curve: Curves.eaSEOut)
: Navigator.push(
context,MaterialPageRoute(
builder: (_) => DetailedView(data,index)));
},);
},);
} else if (snapshot.hasError) {
_widget = Center(child: Text('Something went wrong'));
} else {
_widget = Center(child: CircularProgressIndicator());
}
return _widget;
},);
setState(() => _widget = _temp);
}
@override
void initState() {
super.initState();
initDb();
}
void initDb() async {
await DatabaseHelper.initDatabase();
_buildWidgets();
String name = DatabaseHelper.getTable();
print('table Name :$name');
Color _temp = (name == 'Datas_hu') ? Colors.black : Colors.white;
setState(() {
_iconColor = _temp;
});
}
changeTableName() async {
await DatabaseHelper.changeTable();
String name = DatabaseHelper.getTable();
print('table Name is :$name');
Color _temp = (name == 'Datas_hu') ? Colors.black : Colors.white;
setState(() {
_iconColor = _temp;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: MyDrawer(),appBar: AppBar(
title: Text('My App'),actions: <Widget>[
IconButton(
icon: Icon(Icons.language),color: _iconColor,onpressed: () {
setState(
() => _widget = Center(child: CircularProgressIndicator()));
Future.delayed(Duration(seconds: 1),() {
// _buildWidgets();
});
changeTableName();
_buildWidgets();
},)
],body: Container(
child: _widget,);
}
}
detailed_view.dart 在这里建立综合浏览量,并希望在单击列表视图应用栏的操作图标时更改语言
import 'package:flut_bount/home_page.dart';
import 'package:Flutter/material.dart';
import 'package:flut_bount/user.dart';
import 'package:Flutter_html/Flutter_html.dart';
class DetailedView extends StatefulWidget {
final List<User> user;
final int index;
DetailedView(this.user,this.index);
@override
DetailedViewState createState() => DetailedViewState();
}
class DetailedViewState extends State<DetailedView>
with WidgetsBindingObserver {
int activePageIndex;
@override
void initState() {
super.initState();
pageController = PageController(initialPage: widget.index);
setState(() => activePageIndex = widget.index);
}
@override
Widget build(BuildContext context) => Scaffold(
// drawer: MyDrawer(),appBar: AppBar(
title: Text('My App'),actions: <Widget>[
IconButton(
onpressed: () {
if (widget.user[activePageIndex].favourite == 0 ||
widget.user[activePageIndex].favourite == null) {
setState(() => widget.user[activePageIndex].favourite = 1);
} else {
setState(() => widget.user[activePageIndex].favourite = 0);
}
},icon: Icon(Icons.star),color: widget.user[activePageIndex].favourite == 1
? Colors.yellow
: Colors.white,)
],body: PageView.builder(
controller: pageController,itemCount: widget.user.length,int index) =>
DetaildViewPage(user: widget.user[index]),onPageChanged: (pageIndex) {
setState(() => activePageIndex = pageIndex);
},);
}
class DetaildViewPage extends StatefulWidget {
final User user;
const DetaildViewPage({Key key,this.user}) : super(key: key);
@override
_DetaildViewPageState createState() => _DetaildViewPageState();
}
class _DetaildViewPageState extends State<DetaildViewPage> {
@override
void initState() {
// Todo: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: ListView(
children: <Widget>[
Html(
data: widget.user.description,);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)